停止javascript函数

停止javascript函数,javascript,Javascript,我想要的是: 监控播放机在达到电影85%时执行功能-Ok 执行将一些数据插入Mysql表的PHP脚本-Ok 只执行一次(停止循环),因为我只希望Mysql表中有一行-Fail 我的代码: jwplayer().onTime(function(evt) { if (evt.position > ([evt.duration] * (85/100)) && x!=1) { loadXMLDoc(); var x = 1; } })

我想要的是:

  • 监控播放机在达到电影85%时执行功能-Ok
  • 执行将一些数据插入Mysql表的PHP脚本-Ok
  • 只执行一次(停止循环),因为我只希望Mysql表中有一行-Fail
  • 我的代码:

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

    谢谢

    问题是x每次都会被重置

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

    如果希望函数在每次页面加载时只运行一次,另一种方法是使函数自杀

    (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
    (例如,用户返回到接近开始的位置)

    (功能(播放器){
    var timeListener;
    功能检查和加载(evt){
    如果(evt位置>(evt持续时间*(85/100))){
    loadXMLDoc();
    timeListener=函数(evt){};
    }
    }
    timeListener=检查和加载;
    player.onTime(函数(evt){timeListener(evt);});
    player.onSeek(函数(evt){
    如果(evt位置<(evt持续时间*(15/100))){
    timeListener=检查和加载;
    }            
    });
    onComplete(函数(evt){timeListener=checkAndLoad;});
    })(jwplayer());
    

    最好是取消注册侦听器,但JW Player API目前不公开removeEventListener方法。

    您希望侦听器在每次页面加载时只运行一次,还是每次视频启动和播放时都运行一次?
    (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());