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

Posted

技术标签:

【中文标题】如何判断 <video> 元素当前是不是正在播放?【英文标题】:How to tell if a <video> element is currently playing?如何判断 <video> 元素当前是否正在播放? 【发布时间】:2011-10-16 04:26:03 【问题描述】:

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

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

我得到的最接近的是:

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

【问题讨论】:

【参考方案1】:
var vid = document.getElementById("myVideo");
vid.onplaying = function() 
alert("The video is now playing");;

你可以使用这个see this

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

我也遇到了同样的问题。解决方案非常简单直接:

// 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 我认为以下链接将为使用 javascript 控制视频提供足够的信息:w3schools.com/tags/ref_av_dom.asp【参考方案4】:

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

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

那么元素当前正在播放。

您可能还需要检查readyState 以查看媒体是否因错误而停止。也许是这样的:

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

【讨论】:

这个假设在 IE 中似乎不成立。当用户正在寻找时(因此视频现在没有播放),currentTime 可以大于 0 并且同时 paused =ended = false。 currentTime 如果视频尚未开始播放,则以秒为单位在 Safari 中以浮点数为单位提供视频持续时间。 可悲的是,这样的属性不符合规范!!【参考方案5】:

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

Object.defineProperty(HTMLMediaElement.prototype, 'playing', 
    get: function()
        return !!(this.currentTime > 0 && !this.paused && !this.ended && this.readyState > 2);
    
)

现在您可以在 &lt;video&gt;&lt;audio&gt; 元素上使用它,如下所示:

if(document.querySelector('video').playing) // checks if element is playing right now
    // Do anything you want to

【讨论】:

【参考方案6】:
var video = $('selector').children('video');

var videoElement = video.get(0);

if (!videoElement.paused)  

使用 Jquery 的一种方法

【讨论】:

这是最好的方法。 ACC一太麻烦了【参考方案7】:

在这里查看我的回复:HTML5 video tag, javascript to detect playing status?

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

【讨论】:

以上是关于如何判断 <video> 元素当前是不是正在播放?的主要内容,如果未能解决你的问题,请参考以下文章

jquery如何判断元素是不是被点击

jquery判断一个元素是不是存在

如何判断list中的元素是不是重复

检查 <video> 标签是不是可以显示媒体并处理 Angular 中的错误

js或者jQuery判断链接是不是存在

java treeset和hashset如何判断元素是不是相同