1

在其他 4 个主要浏览器(Chrome、Firefox、IE 和 Safari)上,readyState 变为 4,我的代码执行得很好。然而在 Opera 上,readyState 只达到 2 并且永远不会达到 4。

代码:

var createSeekslider = function() {
    if($atVideo[0].readyState == 4) {
        var videoDuration = $atVideo[0].duration;
        $seekSlider = $('.videoSeekslider').slider({
            orientation:'horizontal',
            range:'min',
            min:0,
            max:videoDuration,
            value:0,
            step:0.01,
            animate:true,

            slide: function(event, ui) {
                $atVideo[0].currentTime = ui.value;
            }
        }); //End of (seekslider).slider function       
        } else {
            setTimeout(createSeekslider, 150);
        }
    }
createSeekslider();

任何帮助将不胜感激!!

4

1 回答 1

0

readyState与其尝试捕捉等于 4的时刻,我建议稍微不同的策略 - 处理canplaythrough事件:

$atVideo[0].addEventListener('canplaythrough', function() {
  // actually, `$atVideo[0].oncanplaythrough = function()` should do fine too
  $seekSlider = $('.videoSeekslider').slider({
    orientation: 'horizontal',
    range: 'min',
    min: 0,
    max: this.duration,
    value: 0,
    step: 0.01,
    animate: true,
    slide: (function(event, ui) {
      this.currentTime = ui.value;
    }).bind(this)
  });
});

我怀疑您的问题与此问题中描述的相同:简而言之,Opera在开始加载视频后立即设置readyState为 4 ( ),然后在加载视频的大部分内容时将其切换为 2 ( ) - 这也是快赶上预定的检查。HAVE_ENOUGH_DATAHAVE_CURRENT_DATAsetTimeout

于 2014-04-01T17:26:19.867 回答