1

我正在玩 YouTube 嵌入视频。我希望播放器在第三秒暂停。下面的代码:

playerInstance.on('time', function(x) {
    if (x.position === 3){
        playerInstance.pause();
    }
});

但它并不每次都有效。有时它有效,有时则无效。这完全是随机的。为什么?

4

3 回答 3

1

根据正在播放的媒体类型和挂钩到 JW 播放器实例的其他事件,“onTime”事件每秒会触发多次,并报告到许多小数位。

因此,“位置”不太可能恰好是 3(这就是您用以下内容有效地表达的意思:'==' & '===')。

使用 '>=' 会更健壮:

playerInstance.on('time', function(x) {
    if (x.position >= 3){
        playerInstance.pause();
    }
});

然而,这意味着玩家将无法玩超过 3 秒,因此根据您的要求,您可能还需要包含额外的逻辑来满足以下需求:

  • 在暂停点后继续播放
  • 如果用户搜索超过 3 秒怎么办
  • 回溯然后再次到达暂停点
  • ETC...

可能更好的解决方案是将“位置”转换为整数值并进行直接比较。这意味着您不需要逻辑来处理超过暂停点的进度。但是,您需要逻辑来确保它仅在暂停点暂停一次。以下是针对此的:

playerInstance.on('time', function(x){
    if(parseInt(x.position,10)===3){
        if(!playerInstance["pauseOnce"]){
            playerInstance["pauseOnce"]=true;
            playerInstance.pause();
        }
    }else{
        playerInstance["pauseOnce"]=false;
    }
});
于 2015-12-15T11:21:53.203 回答
0

在将我的 jwplayer 对象放入变量之前,我遇到了问题。我没有解释,但我敢说,如果你继续使用 jwplayer(); 你可能会有更好的运气。显式调用。希望这会给您带来更一致的结果。也可以尝试使用“==”而不是“===”。你能告诉我们你是如何声明 playerInstance 的吗?

于 2015-12-09T10:39:57.310 回答
0

我使用了推荐的声明 - JW Player website Api

“我们鼓励开发人员停止使用 jwplayer() 语法,而是保留对播放器实例的引用。根据 JW Player 7 的设计方式,这实际上会在播放器设置过程中节省几毫秒的时间。”

var playerInstance = jwplayer('container'); //jwplayer('container').pause(); // BAD! :( playerInstance.pause(); // Good :)

我刚刚用 jwplayer() 声明也用 '==' & '===' 测试了你的解决方案。但它仍然不起作用。

我用我们的 2 声明为你准备了一个小提琴。

http://jsfiddle.net/slk500/rftbtzpr/

谢谢你的帮助!

于 2015-12-10T02:33:22.327 回答