停止javascript函数

时间:2011-08-29 21:43:28

标签: javascript

我想要的是什么:

  1. 监控播放器在达到影片的85%时执行功能 - 确定
  2. 执行一个将一些数据插入Mysql表的PHP脚本 - 确定
  3. 这只做一次(停止循环),因为我只想在Mysql表中有一行 - 失败
  4. 我的代码:

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

    由于

2 个答案:

答案 0 :(得分:2)

问题是每次都会重置x

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

答案 1 :(得分: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方法。