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

时间:2011-07-29 18:25:00

标签: javascript html5-video

我发现MediaElement界面会公开pausedseekingended等属性。但是,从列表中遗漏的是playing

我知道有一个元素开始播放时会激发playing events,并且在播放时会定期发生timeupdate events个事件,但我正在寻找一种方法来确定是否视频现在正在播放 。有没有一种简单的方法来确定这个?

我最接近的是:

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

7 个答案:

答案 0 :(得分:71)

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

答案 1 :(得分:59)

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

  • currentTime大于零,
  • paused为false,
  • ended是假的

然后该元素正在播放。

您可能还需要检查readyState以查看媒体是否因错误而停止。

答案 2 :(得分:8)

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

var videoElement = video.get(0);

if (!videoElement.paused) {} 

使用Jquery

执行此操作的一种方法

答案 3 :(得分:2)

请在此处查看我的回复:HTML5 video tag, javascript to detect playing status?

基本上,如前所述,没有单一属性需要检查,但根据规范,它是条件的组合。

答案 4 :(得分: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");
};

答案 5 :(得分:1)

var vid = document.getElementById("myVideo");
vid.onplaying = function() {
alert("The video is now playing");};

你可以使用这个see this

答案 6 :(得分:0)

您可以检查 readyState 是否等于或大于 HAVE_FUTURE_DATA 并且 paused 为 false。这可以确认视频正在播放。

正如 https://html.spec.whatwg.org/ 中所解释的,播放事件将在以下情况下触发: “readyState 新近等于或大于 HAVE_FUTURE_DATA 且 paused 为假,或 paused 新近假且 readyState 等于或大于 HAVE_FUTURE_DATA”