在其他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();
非常感谢任何帮助!!
答案 0 :(得分: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)
});
});
我怀疑您的问题与this issue中描述的相同:简而言之,Opera在开始加载视频后立即将readyState
设置为4(HAVE_ENOUGH_DATA
),然后将其切换到2(HAVE_CURRENT_DATA
)当它的一些重要部分被加载时 - 这对setTimeout
计划的检查来说太快了。