首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS -向具有与悬停元素相同的数据属性的元素添加活动类

JS -向具有与悬停元素相同的数据属性的元素添加活动类
EN

Stack Overflow用户
提问于 2020-12-21 10:30:04
回答 1查看 149关注 0票数 0

我想达到一个类似的效果,在this page部分“为每个人的东西”。在将鼠标悬停在任何"link“元素上之后,具有相同"data-product”值的"product“元素应该获得"active”类。我需要在纯JS (没有jQuery)中实现它。我尝试了几种方法,但从未成功过。你知道有什么对我有帮助的例子吗?

代码语言:javascript
复制
<div class="product-links">
    <a class="link" data-product="1" href="/url/"></a>
    <a class="link" data-product="2" href="/url/"></a>
    <a class="link" data-product="3" href="/url/"></a>
    <a class="link" data-product="4" href="/url/"></a>
</div>

<div class="screenshot-container">
    <div class="product" data-product="1"><img src="image.jgp"></div>
    <div class="product" data-product="2"><img src="image.jgp"></div>
    <div class="product" data-product="3"><img src="image.jgp"></div>
    <div class="product" data-product="4"><img src="image.jgp"></div>
</div>
EN

回答 1

Stack Overflow用户

发布于 2020-12-21 10:56:07

这里有一种可能的方法,它使用mouseover事件和一些事件冒泡将active类添加到当前悬停在其上的任何链接。

代码语言:javascript
复制
const linkContainer = document.querySelector(".product-links");

linkContainer.addEventListener("mouseover", function(e) {
  if (e.target.className !== "link") return;
  const productId = e.target.dataset.product;
  selectActive(productId);
});

linkContainer.addEventListener("mouseout", function(e) {
  if (e.target.className !== "link") return;
  selectActive();
});

function selectActive(productId) {
  const allProducts = document.querySelectorAll(".product");
  for (let product of allProducts) {
    if (product.dataset.product === productId) {
      product.classList.add("active");
    } else {
      product.classList.remove("active");
    }
  }
}
代码语言:javascript
复制
.active {
  background-color: #FF0;
}
代码语言:javascript
复制
<div class="product-links">
    <a class="link" data-product="1" href="/url/">1</a>
    <a class="link" data-product="2" href="/url/">2</a>
    <a class="link" data-product="3" href="/url/">3</a>
    <a class="link" data-product="4" href="/url/">4</a>
</div>

<div class="screenshot-container">
    <div class="product" data-product="1">1</div>
    <div class="product" data-product="2">2</div>
    <div class="product" data-product="3">3</div>
    <div class="product" data-product="4">4</div>
</div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65386867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档