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

Eva*_*all 67 javascript html5-video

我看到的MediaElement接口公开属性,如paused,seekingended.但是,从列表中遗漏的是playing.

我知道有playing事件,当元素火开始播放,和timeupdate赛事活动定期一边玩,但是我正在寻找一种方法来确定视频是否正在播放现在.有没有一种简单的方法来确定这个?

我最接近的是:

!(video.paused || video.ended || video.seeking || video.readyState < video.HAVE_FUTURE_DATA)
Run Code Online (Sandbox Code Playgroud)

Rae*_*bal 77

这已经很长时间了,但这里有一个很棒的提示.您可以将.playing所有媒体元素定义为自定义属性,并在需要时访问它.方法如下:

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

现在你可以使用它<video><audio>像这样的元素:

if(document.querySelector('video').playing){ // checks if element is playing right now
    // Do anything you want to
}
Run Code Online (Sandbox Code Playgroud)


Geo*_*ins 67

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

  • currentTime 大于零,并且
  • paused 是假的,而且
  • ended 是假的

然后该元素正在播放.

您可能还需要检查readyState介质是否因错误而停止.

  • 遗憾的是这样的房产不符合规范! (2认同)

Luk*_*son 8

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

var videoElement = video.get(0);

if (!videoElement.paused) {} 
Run Code Online (Sandbox Code Playgroud)

使用Jquery执行此操作的一种方法