如何判断<视频>元素当前正在播放
How to tell if a <video> element is currently playing?
我看到MediaElement接口公开了paused
、seeking
和ended
等属性。但是,列表中缺少playing
。
我知道playing
事件会在元素开始播放时触发,timeupdate
事件会在播放时周期性地触发,但我正在寻找一种方法来确定视频是否正在播放。有没有一种简单的方法来确定这一点?
我得到的最接近的是:
!(video.paused || video.ended || video.seeking || video.readyState < video.HAVE_FUTURE_DATA)
没有一个特定的属性可以显示MediaElement
当前是否正在播放。但是,您可以从其他属性的状态中推断出这一点。如果:
currentTime
大于零,并且paused
为假,并且ended
为假
则该元素当前正在播放。
您可能还需要检查readyState
,查看介质是否因错误而停止。也许是这样的:
const isVideoPlaying = video => !!(video.currentTime > 0 && !video.paused && !video.ended && video.readyState > 2);
这已经很长时间了,但这里有一个很棒的提示。您可以将.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
}
var video = $('selector').children('video');
var videoElement = video.get(0);
if (!videoElement.paused) {}
使用Jquery 的一种方法
在这里看到我的回应:HTML5视频标签,javascript检测播放状态?
Basicaly,正如之前所说,没有单一的财产需要检查,但根据规范,这是多种条件的结合。
我也面临同样的问题。解决方案非常简单明了:
// 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");
};
var vid = document.getElementById("myVideo");
vid.onplaying = function() {
alert("The video is now playing");};
你可以使用这个查看这个
如果readyState等于或大于HAVE_FUETURE_DATA并暂停为false,则可以检查它。这可以确认视频正在播放。
如中所述https://html.spec.whatwg.org/播放事件将在以下情况下触发:"readyState新近等于或大于HAVE_FUETURE_DATA并且paused为false,或者paused新近为false并且readyState等于或大于"HAVE_FLUTURE_DATA";
以下是播放/暂停按钮的简单代码:
playpause.addEventListener("click", (e) => {
if (video.paused || video.ended) {
video.play();
} else {
video.pause();
}
});
来源:https://developer.mozilla.org/en-US/docs/Web/Guide/Audio_and_video_delivery/cross_browser_video_player
- tiltSlider播放/暂停视频元素(如果li有当前类)
- 未能加载,因为找不到支持的源.当播放HTML5音频元素时
- 在没有大量回调函数的情况下在列表元素上循环播放同一动画
- 在AngularJS中将元素添加到作用域时,如何在所有设备上播放声音
- 第一次未播放HTML音频元素
- 创建视频播放器(Quicktime浏览器插件)React元素,输出缺少的视频属性
- 当元素在视口中可见时,自动播放html视频
- 如何在 HTML5 视频元素中播放电影时在 IOS 上显示非全尺寸视频
- 如何在页面上播放每个音频元素(HTML,JQuery,Javascript)
- 媒体记录器 API 通过 Web 音频 API(不是音频元素)播放
- [代码播放器]当 iframe 内容从文本区域使用 JavaScript 动态加载时,如何在 iframe 内查找元素
- 当 HTML5 音频元素播放了一定百分比时运行函数
- 为什么iPhone不允许在html元素的背景中自动播放视频
- 如何让Chrome和/或Firefox在Karma测试中播放<音频>元素
- 在连接到 Web 音频 API 的音频元素上设置播放速率
- 使用 Soundcloud 播放器按钮更改嵌入的页面上的元素
- 自定义html5视频播放器控件元素中可用的按钮
- html5视频元素有任何错误?它不会在几个小时后继续播放内容
- 通过超级立体模型中的固定元素播放
- 如何禁用html5音频元素播放/暂停按钮