停止javascript函数

Stop a javascript function

本文关键字:函数 javascript 停止      更新时间:2023-09-26

我想要的:

  1. 监控一个播放器执行一个函数,当它达到85%的电影- Ok
  2. 执行一个PHP脚本,插入一些数据到Mysql表Ok
  3. 只做一次(停止循环),因为我想在Mysql表中只有一行- 失败
我代码:

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

(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方法。