我使用pause()停止视频。由于某种原因,它在chrome中不再起作用-视频会短暂停止,但随后继续播放,我完全迷失了我可能会出现的错误。
几个月前,我开发了一个脚本,该脚本使用pause()来控制视频播放。一切运行正常(并且仍然使用Firefox),但是由于某些原因,它在过去两个月中的某处停止使用chrome。我已经将其简化为仅几行代码,但是我的pause()函数在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,但这不是问题,不是吗?)
答案 0 :(得分:1)
我无法告诉您发生了什么变化,但是添加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);
}
});