2011-07-29 27 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

相关问题