【问题标题】:Javascript Mouseevent On Hover悬停时的 Javascript Mouseevent
【发布时间】:2022-12-06 13:29:23
【问题描述】:

目前我正在为我的鼠标悬停事件寻求帮助。

<div class="video-container">
<video id="my_video" loop muted poster="IMAGE_URL"> <!-- put your image here -->
  <source src="VIDEO_URL" type="video/mp4"> <!-- path to your video here -->
</video>
</div>

以上是我的video-container,在我的索引页面上我显示了 10 个视频。他们每个人都应该在悬停时显示视频预览,但是对于我当前的 javascript,只有带有 my_video id 的第一个视频在悬停时显示视频预览。

let myVideo = document.getElementById("my_video");
myVideo.addEventListener("mouseover", () => {
    myVideo.play()
    image.style.display = 'none'
});

myVideo.addEventListener("mouseleave", () => {
    myVideo.pause();
});

我怎样才能让我主页上的所有视频都以相同的方式运行?

【问题讨论】:

  • 所有video 标签都具有相同的 ID 吗?如果是这样,那是您作为 ID 的问题的一部分必须是独一无二的。 document.getElementById 将返回一个元素并且只返回一个元素。
  • @JonP 是的,它们都是相同的 ID.. 你能帮我理解如何让它们独一无二,并且仍然能够找到它们吗?

标签: javascript html


【解决方案1】:

因为你做了getElementById,它只涵盖了一个元素。和身份证对于 HTML 中的元素必须是唯一的,您不能有多个具有相同 ID 的元素。您可以为所有 video 元素赋予相同的类并立即应用所有这些元素,或者直接应用到所有 video 元素

let myVideos = document.querySelectorAll("video");
myVideos.forEach(vid => {
  vid.addEventListener("mouseover", () => {
    vid.play();
  });
  vid.addEventListener("mouseleave", () => {
    vid.pause();
  });
})
<div id="container">
  <video id="my_video_1" loop muted poster="https://external-content.duckduckgo.com/iu/?u=http%3A%2F%2Fwww.tiverton.ri.gov%2Fimg%2Fcontent%2Ftrees%2Fhome_tree.png&f=1&nofb=1&ipt=c0fbdc7aa01163cdffb57908bb424286af2ebd3b6352a581d61660f31a299a51&ipo=images"> <!-- put your image here -->
  <source src="VIDEO_URL" type="video/mp4"> <!-- path to your video here -->
</video>
<video id="my_video_2" loop muted poster="https://external-content.duckduckgo.com/iu/?u=http%3A%2F%2Fwww.tiverton.ri.gov%2Fimg%2Fcontent%2Ftrees%2Fhome_tree.png&f=1&nofb=1&ipt=c0fbdc7aa01163cdffb57908bb424286af2ebd3b6352a581d61660f31a299a51&ipo=images"> <!-- put your image here -->
  <source src="VIDEO_URL" type="video/mp4"> <!-- path to your video here -->
</video>
</div>

【讨论】:

  • 太感谢了。这正是我所需要的。
【解决方案2】:

您有多个具有相同 ID 的元素。这是你的问题,ID 必须是唯一的。

你想要这样的东西

注意你也应该not use fat arrow functions for event listeners

//Get the video elements we want
let videos = document.querySelectorAll(".video-container video");

//Loop the elements
videos.forEach((el) => {
  //Add the event listeners
  el.addEventListener("mouseover", function() {
    console.log("Play " + this.querySelector("source").src);
    this.play();
  });

  el.addEventListener("mouseleave", function() {
    console.log("Pause " + this.querySelector("source").src);
    this.pause();
  });

});
<div class="video-container">
  <video loop muted poster="IMAGE_URL"> <!-- put your image here -->
  <source src="VIDEO_URL" type="video/mp4"> <!-- path to your video here -->
</video>
</div>
<div class="video-container">
  <video loop muted poster="IMAGE_URL"> <!-- put your image here -->
  <source src="VIDEO_URL2" type="video/mp4"> <!-- path to your video here -->
</video>
</div>

【讨论】:

  • 正如我在您的参考资料中所读到的,只要程序不使用 this 关键字,使用粗箭头功能应该不是问题,不是吗?然而,知道这一点很有趣,我很好奇它是否对性能有副作用,你能告诉我吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2014-02-12
相关资源
最近更新 更多