为什么视频的.pause()不再适用于Chrome?

时间:2019-04-06 14:03:16

标签: javascript jquery google-chrome video

我使用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,但这不是问题,不是吗?)

1 个答案:

答案 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);
    }
});