2011-07-29 58 views
48

我看到MediaElement接口暴露了屬性,如paused,seekingended。然而,列表中缺少的是playing如何判斷<video>元素當前是否正在播放?

我知道有playing events火當一個元素開始播放,並定期timeupdate events事件,而打球,但我正在尋找一種方法來確定視頻是否正在播放現在。有沒有簡單的方法來確定這一點?

我得到的最接近是:

!(video.paused || video.ended || video.seeking || video.readyState < video.HAVE_FUTURE_DATA) 

回答

42

沒有一個特定的屬性,這將揭示MediaElement是否正在播放。但是,您可以從其他屬性的狀態中推斷出這一點。如果:

  • currentTime大於零,並
  • paused是假的,
  • ended是假

那麼元素正在播放。

您可能還需要檢查readyState以查看媒體是否由於錯誤而停止。

+0

這種假設似乎並不在IE舉行。當用戶正在尋找(並且視頻因此現在不在播放)時,currentTime可以大於0,同時暫停=結束= false。 – Bjarke

+0

currentTime如果視頻尚未開始播放,則會以秒爲單位將視頻持續時間視爲Safari中的浮點數。 –

7
var video = $('selector').children('video'); 

var videoElement = video.get(0); 

if (!videoElement.paused) {} 

一種方式是一個偉大的小費。您可以將.playing定義爲所有媒體元素的自定義屬性,並在需要時進行訪問。這裏是如何:

Object.defineProperty(HTMLMediaElement.prototype, 'playing', { 
    get: function(){ 
     return !!(this.currentTime > 0 && !this.paused && !this.ended && this.readyState > 2); 
    } 
}) 

現在你可以使用它在<video><audio>元素是這樣的:

if(document.querySelector('video').playing){ // checks if element is playing right now 
    // Do anything you want to 
} 
41

這是一個很長一段時間,但在這裏做的

+0

很好,謝謝 – corvid

相關問題