难以理解Popcorn.js timeupdate函数,因为它在某些情况下不起作用

时间:2013-08-20 04:16:36

标签: javascript html5 html5-video popcornjs

为什么第一个代码块工作而第二个代码块不? -

以下代码有效: -

// this code works --

<script src=".../popcorn-complete.min.js"></script>

    var time_prompts = new Array();
    time_prompts[0] = 2  //any integer < video duration

      $popcorn.on( "timeupdate", function() {
          console.log( this.currentTime() );
          if (this.currentTime() > time_prompts[0] && this.currentTime() < time_prompts[0]+0.1) {
              this.pause();
              console.log(this.paused)
          }  
      });

虽然以下代码不起作用: -

// this code DOES NOT work

    <script src=".../popcorn-complete.min.js"></script>

        var time_prompts = new Array();
        time_prompts[0] = 2  //any integer < video duration

          $popcorn.on( "timeupdate", function() {
              console.log( this.currentTime() );
              if (this.currentTime() == time_prompts[0]) {
                  this.pause();
                  console.log(this.paused)
              }  
          });

2 代码块之间的唯一区别是'if语句'(条件)

1 个答案:

答案 0 :(得分:1)

这是因为this.currentTime()不是整数。它是包含浮点值的Number。正如您在jsfiddle demo中提供的documentation所见,它不太可能获得圆整数值。因此,在这种情况下检查相等性是不合适的。您没有指定要使用代码实现的内容,但是如果要在播放后达到2秒后暂停视频,则应检查currentTime是否大于2,然后设置一个变量将确保您只执行一次:

var time_prompts = [], once = true;
time_prompts[0] = 2  //any integer < video duration

  $popcorn.on( "timeupdate", function() {
      console.log( this.currentTime() );
      if (this.currentTime() > time_prompts[0] && once) {
          once = false;
          this.pause();
          console.log(this.paused)
      }  
  });