为什么.pause()视频不再使用Chrome?

问题描述 投票:2回答:1

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

javascript jquery google-chrome video
1个回答
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);
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.