我使用pause()来停止视频。由于某些原因,这不再适用于Chrome - 视频暂停,但随后继续播放,我完全迷失了我的错误。
几个月前,我开发了一个使用pause()来控制视频播放的脚本。一切都运行良好(仍然使用Firefox),但由于某种原因,它在过去两个月的某个地方停止使用chrome。我完全将其删除为几行代码,但我的暂停()函数在Ubuntu 18.04上的Chromium和Windows 7上的最新Chrome中仍然不再有效。
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script language="JavaScript">
$( document ).ready(function() {
var vid = document.getElementById("videoplayer");
$( "#videoplayer" ).click(function(e) {
vid.pause();
});
});
</script>
</head>
<body>
<video width="1280" height="960" controls id="videoplayer">
<source src="video.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</body>
(我知道这是一个有点丑陋的DOM和jquery的混合,因为我在我的大部分脚本中使用jquery,但这应该不是问题,是吗?)。
我不能告诉你改变了什么,但添加e.preventDefault
修复它:
$( "#videoplayer" ).click(function(e) {
e.preventDefault(); // <=====================
vid.pause();
});
通常,如果您“处理”了某些内容,则需要阻止其默认操作。
我的猜测是Chrome在您点击视频时实施了切换暂停/播放的默认操作。因此,您的代码会暂停,然后Chrome会将其切换回来播放。
在这种情况下,可能值得允许默认而不是明确暂停,可能是通过引入超时:
$( "#videoplayer" ).click(function(e) {
if (!vid.paused) { // Check that video is playing when clicked
setTimeout(() => { // V. brief timer to allow default action to occur
if (!vid.paused) { // Is it still playing?
vid.pause(); // Pause it
}
}, 0);
}
});