Javascript “如何区分两者”;“暂停”;事件-由单击“;暂停”;按钮,并由到达媒体片段结尾引起?
如果用户想要停止HTML5媒体,例如通过单击“暂停”本机控件按钮,我们将获得“onpause”事件。 同时,如果媒体元素到达指定片段的末尾,它会自动触发相同的“onpause”事件。有可能把它们分开吗?在JQuery风格中Javascript “如何区分两者”;“暂停”;事件-由单击“;暂停”;按钮,并由到达媒体片段结尾引起?,javascript,html,html5-video,html5-audio,Javascript,Html,Html5 Video,Html5 Audio,如果用户想要停止HTML5媒体,例如通过单击“暂停”本机控件按钮,我们将获得“onpause”事件。 同时,如果媒体元素到达指定片段的末尾,它会自动触发相同的“onpause”事件。有可能把它们分开吗?在JQuery风格中 <video id="video1" src="url/video.webm#t=10,20" controls></video> <script type="text/javascript"> $(window).load(func
<video id="video1" src="url/video.webm#t=10,20" controls></video>
<script type="text/javascript">
$(window).load(function () {
$('#video1').on("manualpause", function () {
alert("you paused this media manually!");
});
$('#video1').on("fragmentend", function () {
alert("you've reached the end of the fragment! your media is now paused automatically!");
});
});
</script>
$(窗口).load(函数(){
$('#video1')。打开(“手动暂停”,功能(){
警报(“您手动暂停了此媒体!”);
});
$('#video1')。在(“fragmentend”,函数(){
警报(“您已到达片段末尾!您的媒体现在自动暂停!”);
});
});
我试图使用“ontimeupdate”事件,但遭到拒绝:我想在自动暂停(由到达片段结尾引起)发生时做出准确的反应。只有在完整曲目完成时才会发出结束事件。播放片段时,它只会在片段末尾暂停曲目,因为曲目本身尚未结束(除非片段的结束时间恰好也是结尾) 媒体元素在运行时暂停,以进行用户交互 暂停属性为false,readyState属性为 拥有未来数据或拥有足够的数据且用户代理已达到 在媒体资源中,用户必须选择的点 继续的资源 只有在以下情况下,才会发生结束事件: 在以下情况下,媒体元素被称为已结束播放: 元素的readyState属性为HAVE_METADATA或更大,并且 要么:
- 当前播放位置是媒体资源的结尾,并且
- 播放方向为向前,并且
- 媒体元素没有指定循环属性,或者媒体元素具有当前媒体控制器。
- 当前播放位置是最早可能的位置,并且
- 播放方向是向后的。
function onPauseHandler(e) {
var fragmentEndTime = ...; // get/parse end-fragment into this var
if (isEqual(this.currentTime, fragmentEndTime)) {
// likely that fragment ended
}
else {
// a manual pause
}
}
function isEqual(n1, n2) {
return Math.abs(n1 - n2) < 0.00001
}
Pausehandler(e)上的函数{
var fragmentEndTime=…;//获取/解析此变量中的结束片段
if(isEqual(this.currentTime,fragmentEndTime)){
//很可能那个片段结束了
}
否则{
//人工停顿
}
}
函数相等(n1,n2){
返回数学绝对值(n1-n2)<0.00001
}
我今天在搜索“为什么onpause在onended发生时也会触发”时遇到了这个问题。我想将onpause事件和OnOnOnEnded事件之间的逻辑分开 这是我对它的看法:
videoRef.onpause = (e) => {
if (e.target.currentTime != e.target.duration) {
// handleOnPause();
}
}
我注册了
onpause
和oneded
处理程序,在视频未结束时运行onpause
代码。从官方MDN文档中,显然有结束事件和暂停事件。这就是您要找的吗?播放完成时发送结束,播放完成时发送暂停ack已暂停。问题是到达媒体片段的结尾会触发“onpause”事件(而不是“ended”),我无法理解如何捕获这种特定的自动暂停。这两种情况下的事件是相同的,但其性质(从用户的角度看)不同!根据文档,播放完成时会抛出ended,因此应该在媒体结束时抛出ended,而不应该调用pause事件。您100%确定正在抛出pause事件吗?您可以试试$(“#video1”).bind('ended',function(){…?为什么您指的是“ended”?片段的结尾不是媒体的结尾!这并不意味着播放完成,而是意味着暂停!谢谢。这正是我在写“我试图利用‘ontimeupdate’事件”时的意思,但我不知道……这似乎是一个非常简单的黑客行为。也许我们需要检查媒体本身是否被点击(点击是否会导致“暂停”触发“onclick”?)。但如果没有更好的方法,我需要接受这一点…@lyricallywicked您可以在某些浏览器中使用(例如,在FF中工作,但在Chrome中不工作)这使得它不可靠,或者可能更好,为控件提供自定义按钮。实际上,这是一个更好的参考,因为当当前播放位置到达末尾[…]时,它在那里显示,那么用户代理必须遵循以下步骤:
,4.[…]并且媒体元素仍然结束了播放[…],且paused为false,将paused更改为true,并在媒体元素激发名为pause的简单事件。
。我喜欢您的解决方法,因此+1。