我发现MediaElement界面会公开paused
,seeking
和ended
等属性。但是,从列表中遗漏的是playing
。
我知道有一个元素开始播放时会激发playing
events,并且在播放时会定期发生timeupdate
events个事件,但我正在寻找一种方法来确定是否视频现在正在播放 。有没有一种简单的方法来确定这个?
我最接近的是:
!(video.paused || video.ended || video.seeking || video.readyState < video.HAVE_FUTURE_DATA)
答案 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”