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


82

我看到的MediaElement接口公开属性,如pausedseekingended。但是,列表中缺少playing

我知道有playing事件,火灾,当一个元素开始演奏,timeupdate活动活动,同时定期播放,但是我正在寻找一种方法来确定视频是否正在播放现在。有一种简单的方法可以确定这一点吗?

我最接近的是:

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

Answers:


86

已经有很长时间了,但是这里有个很好的提示。您可以定义.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
}

82

没有特定的属性可以显示aMediaElement是否正在播放。但是,您可以从其他属性的状态推论得出。如果:

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

那么该元素当前正在播放。

您可能还需要检查readyState介质是否由于错误而停止。也许是这样的:

const isVideoPlaying = video => !!(video.currentTime > 0 && !video.paused && !video.ended && video.readyState > 2);

IE中似乎没有这种假设。当用户正在搜索时(因此视频现在无法播放),currentTime可以大于0并同时暂停=结束=否。
2015年

如果视频尚未开始播放,currentTime以秒为单位向我提供视频时长,以Safari中的浮动时间显示。
Q卡隆2015年

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

var videoElement = video.get(0);

if (!videoElement.paused) {} 

使用Jquery的一种方法



1

我面临着同样的问题。解决方案非常简单明了:

// if video status is changed to "ended", then change control button to "Play Again"
video.onended = function() {
    $("#play_control_button").text("Play Again");
};

// if video status is changed to "paused", then change control button to "Continue Play"
video.onpause = function() {
    $("#play_control_button").text("Continue Play");
};

// if video status is changed to "playing", then change control button to "Stop"
video.onplaying = function() {
    $("#play_control_button").text("Stop");
};

您可以链接到这些属性的文档吗?
brasofilo

@brasofilo我认为以下链接将提供足够的信息,以使用JavaScript控制视频: w3schools.com/tags/ref_av_dom.asp
Haolin Zhang,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.