2014-04-01 88 views
1

在其他4個主要瀏覽器(Chrome,Firefox,IE和Safari)上,readyState變爲4,我的代碼執行得很好。在Opera然而readyState的僅達到2和永遠不會達到4Opera HTML5視頻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

,而不是試圖捕捉那一刻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預定的檢查來說太快了。

+0

$ atVideo [0] .addEventListener('canplaythrough',function())正是我所需要的!現在就像一個魅力!謝謝! – Xii