2011-08-29 152 views
1

我想要什麼:停止javascript函數

  1. 監視玩家執行一個功能,當它達到電影的85% -
  2. 執行的是插入一些數據到MySQL PHP腳本表 -
  3. 做這個只是一個時間(停止循環),因爲我想在MySQL表中只有一行 - 失敗

我的代碼:

jwplayer().onTime(function(evt) { 
    if (evt.position > ([evt.duration] * (85/100)) && x!=1) { 
     loadXMLDoc(); 
     var x = 1; 
    } 
}); 

感謝

+0

您是否希望偵聽器在每次加載頁面時運行一次,或者每次視頻開始播放時都運行一次? – outis

回答

2

的問題是,如果你想要的功能與每個頁面加載只運行一次x被每次重置

jwplayer().onTime(
    (function() { 
     var check=true; 
     return function(evt) { 
      if (check && evt.position > ([evt.duration] * (85/100))) { 
       loadXMLDoc(); 
       check=false; 
      } 
     } 
    })() 
); 
+0

我收到錯誤...頁面爲空白。 –

+0

我發現了錯誤。應該: –

0

,另一種方法是做一個自殺的功能。

(function (player) { 
    var checkAndLoad = function(evt) { 
     if (evt.position > (evt.duration * (85/100))) { 
      loadXMLDoc(); 
      checkAndLoad=function(evt){}; 
     } 
    }; 
    player.onTime(function(evt) {checkAndLoad(evt);}); 
})(jwplayer()); 

您需要自onTime通過匿名包裝提供獲取自己的事件偵聽器的副本額外的間接,因此覆蓋checkAndLoad不會註冊聽衆直接影響。

如果您希望偵聽器運行多次,請註冊額外的偵聽器,以便在相應事件(例如,用戶尋回到接近開始處)時恢復checkAndLoad

(function (player) { 
    var timeListener; 
    function checkAndLoad(evt) { 
     if (evt.position > (evt.duration * (85/100))) { 
      loadXMLDoc(); 
      timeListener=function(evt){}; 
     } 
    } 

    timeListener = checkAndLoad; 

    player.onTime(function(evt) {timeListener(evt);}); 

    player.onSeek(function(evt) { 
     if (evt.position < (evt.duration * (15/100))) { 
      timeListener=checkAndLoad; 
     }    
    }); 
    player.onComplete(function (evt) {timeListener=checkAndLoad;}); 
})(jwplayer()); 

更好的辦法是取消註冊偵聽器,但JW Player API當前不公開removeEventListener方法。