Javascript Youtube Iframe API:特定getcurrenttime()上的触发器函数

Javascript Youtube Iframe API:特定getcurrenttime()上的触发器函数,javascript,youtube-api,dom-events,Javascript,Youtube Api,Dom Events,我试图在player.getCurrentTime()==10sec(以及更多类似的间隔)时触发函数 我可以用JS计时事件来实现这一点,但它并不准确,而且会大大降低我的浏览器速度 有备用的吗 当前代码: trigFuncAt = Array(3, 5, 7, 10); setInterval(checkFunc(), 200); function checkFunc(){ if( include( trigFuncAt, player.getCurrentTime() ) ){

我试图在
player.getCurrentTime()==10
sec(以及更多类似的间隔)时触发函数

我可以用JS计时事件来实现这一点,但它并不准确,而且会大大降低我的浏览器速度

有备用的吗

当前代码:

trigFuncAt = Array(3, 5, 7, 10);
setInterval(checkFunc(), 200);

function checkFunc(){
    if( include( trigFuncAt, player.getCurrentTime() ) ){
        DoThis();
    }
}

function include(arr,obj) {
    return (arr.indexOf(obj) != -1);
}

function DoThis(){...}
player.getCurrentTime()
是一种计时器类型的变量,它每毫秒改变一次


YT API:

这个想法是使用setTimeout而不是setInterval,因为您不能保证函数需要在间隔时间之间执行的时间足够长。您还需要强制转换为int当前时间。示例代码:

// implicit global video containing YT video
var keypoints = [1, 2, 3, 10, 15];
var updatePlayerInfo = function() {
    var played,
        i = 0,
        keypoint;
    // not ready?
    if (!video.getCurrentTime) {
        return false;
    }
    // ready!
    if (played = parseInt(video.getCurrentTime(), 10)) {
        for (; keypoint = keypoints[i++]; ) {
            if (keypoint === played) {
                // do something
                doSomething();
                break;
            }
        }
    }
    // throttle function!
    setTimeout(function(){
        updatePlayerInfo();
    }, 250);
};

这很好,但我认为'var played'应该在updatePlayerInfo函数外/之前声明,否则它每次都会被重置,每个关键点调用doSomething的次数为3/4次。@ozke播放的是函数的本地,因为它只会暂时存储当前时间。您甚至可以忽略它并多次调用parseInt。再次感谢您的示例。我想说的是,如果您按原样运行代码,它将在标记为关键点的每秒钟内多次调用doSomething。这是期望的结果吗?@ozke它不会那样做的。试试看。有一个
break
doSomething
是FPO。