setTimeout 结合 onmouseout

setTimeout in combination with onmouseout

我正在尝试延迟获得“onmouseout”功能。这样当你移动鼠标时,视频returns几秒后就会出现在海报上。下面的代码瞬间returns你到海报onmouseout.

<video class="content" 
    poster="/video/test.jpg"
    width="320" 
    height="240"  
    loop onmouseover="this.play()" 
    onmouseout="this.load();" >
        <source src="/video/test.mp4" type="video/mp4">
  </video>

下面的代码是一个工作示例,我可以在 onmouseout 延迟后开始工作:

 <video class="content" 
        poster="/video/test.jpg"
        width="320" 
        height="240"  
        loop onmouseover="this.play()" 
        onmouseout="myFunction();" >


        <script>
            function myFunction() {
              setTimeout(function(){ alert("Hello"); }, 3000);
            }
            </script>

<source src="/video/test.mp4" type="video/mp4">
</video>

如何在 setTimeout 中获取“this.load”?

setTimeout 接受一个函数作为其第一个参数,因此您可以将 this.load 作为第一个参数传递并在 onmouseout 属性中使用它:

<video  class="content" 
        poster="/video/test.jpg"
        width="320" 
        height="240"  
        loop 
        onmouseover="this.play()" 
        onmouseout="setTimeout(this.load.bind(this), 3000)" >
    <source src="/video/test.mp4" type="video/mp4">
</video>

编辑:我有一个错误(抱歉)我现在使用绑定函数将视频元素绑定到 load 函数。 然而,这不是最好的方法,因为如果您使用 onmouseout 属性 或任何其他附加事件的 HTML 属性,您只能附加一个 onmouseout 事件。在大多数情况下,您会想要附加多个。所以更好的解决方案是使用 addEventListener 方法:

HTML:

<video  id="content-video"
        class="content" 
        poster="/video/test.jpg"
        width="320" 
        height="240" >
    <source src="/video/test.mp4" type="video/mp4">
</video>

JS:

const video = document.getElementById("content-video");
video.addEventListener("mouseover", function() {
    video.play();
}, false);
video.addEventListener("mouseout", function() {
    setTimeout(video.load.bind(video), 3000);
}, false);

编辑:对于这些错误,我真的很抱歉。我修复了它们,现在可以使用了。