如何判断<video>元素是否正在播放?

我看到MediaElement接口公开了像pausedseekingended属性。 然而,从列表中缺less的是playing

我知道当一个元素开始播放时会playing事件 ,在playing时会定期timeupdate事件事件,但是我正在寻找一种方法来确定video是否正在播放。 有一个简单的方法来确定这一点?

我得到的最接近的是:

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

没有特定的属性会显示MediaElement是否正在播放。 但是,您可以从其他属性的状态中推断出这一点。 如果:

  • currentTime大于零,并且
  • paused是错误的
  • ended是错误的

那么元素正在播放。

您可能还需要检查readyState以查看介质是否由于错误而停止。

这已经很长时间了,但这里有一个很棒的提示。 您可以将.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 } 
 var video = $('selector').children('video'); var videoElement = video.get(0); if (!videoElement.paused) {} 

一种使用Jquery的方法

在这里看到我的回复: HTML5video标签,javascript来检测播放状态?

基本上,如前所述,没有单一的财产来检查,但根据规范,这是一个条件的组合。