javascript - 如何更改悬停时的多个图像的列表

标签 javascript html hover onmouseover onmouseout

我有一个图像列表,当我将鼠标悬停在其上时,我希望进行更改,然后在鼠标离开时变回上一个图像。并且每个图像都是不同的。我已经做到了,但只有当鼠标悬停在第一个项目上时,事件才会在两个图像上执行。我找不到正确的方法。

//html代码//

      <li>
        <div class="card">
              <img class="my-img" id="my-img1" src="./images/AMH010301_G-1-dresslink.jpg" alt="Denim Jeans">
              <h1>Lorem1</h1>
              <span class="price-first">$24.99</span>
              <span class="price">$17.99</span>
              <br>
              <span class="fa fa-star checked"></span>
              <span class="fa fa-star checked"></span>
              <span class="fa fa-star checked"></span>
              <span class="fa fa-star"></span>
              <span class="fa fa-star"></span>
              <p>Lorem ipsum dolor sit amet..</p>
              <button class="add-to">Add to Cart</button>
        </div>  
       </li>
       <li>
        <div class="card">
              <img class="my-img" id="my-img2" src="./images/AMH010327_W-1-dresslink.jpg" alt="Denim Jeans">
              <h1>Lorem2</h1>
              <span class="price-first">$24.99</span>
              <span class="price">$14.99</span>
              <br>
              <span class="fa fa-star checked"></span>
              <span class="fa fa-star checked"></span>
              <span class="fa fa-star checked"></span>
              <span class="fa fa-star"></span>
              <span class="fa fa-star"></span>
              <p>Lorem ipsum dolor sit amet..</p>
              <a href="product-page.html"><button class="add-to">Add to Cart</button></a>
        </div> 
       </li>

//JavaScript//

 let img = document.querySelectorAll('.card img');

for (var i = 0; i < img.length; i++) {
     img[i].addEventListener('mouseover', hover);
     img[i].addEventListener('mouseout', leave);
}


function hover() {
    document.getElementById("my-img1").src = "./images/AMH010301_G-5-dresslink.jpg";
    document.getElementById("my-img2").src = "./images/AMH010327_W-5-dresslink.jpg";

}

function leave() {

    document.getElementById("my-img1").src = "./images/AMH010301_G-1-dresslink.jpg";
    document.getElementById("my-img2").src = "./images/AMH010327_W-1-dresslink.jpg";

}

最佳答案

首先,您似乎只将事件附加到其中一张图像上,而不是同时附加到两个图像上。下面的代码将循环遍历所有图像并将事件附加到它们。

let img = document.querySelectorAll('.card img');
for (var i = 0; i < img.length; i++)
{
    img[i].addEventListener('mouseover', hover);
    img[i].addEventListener('mouseout', leave);
}

其次,您附加到图像的事件不会查看正在悬停的图像,它只会更改这两个图像的图像。以下代码将查看您将鼠标悬停在其上的图像并仅对其进行修改。

function hover(e) { e.target.src = e.target.getAttribute("data-hover-img"); }
function leave(e) { e.target.src = e.target.getAttribute("data-leave-img"); }

最后,为了让每个图像都有不同的图像来更改悬停和悬停状态,您需要将该信息存储在与图像连接的某个位置。我选择使用上面所示的数据属性。因此图像的 HTML 应该如下所示。

<img class="my-img" id="my-img1" src="./images/AMH010301_G-1-dresslink.jpg" data-hover-img=""./images/AMH010301_G-5-dresslink.jpg"" data-leave-img="./images/AMH010301_G-1-dresslink.jpg" alt="Denim Jeans">

<img class="my-img" id="my-img2" src="./images/AMH010327_W-1-dresslink.jpg" data-hover-img="./images/AMH010327_W-5-dresslink.jpg" data-leave-img="./images/AMH010327_W-1-dresslink.jpg" alt="Denim Jeans">

关于javascript - 如何更改悬停时的多个图像的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53046400/

相关文章:

jquery - 将鼠标悬停在 1 个 div 上以更改另一个中的内容

javascript - Node.js Sequelize 数据库规范化

javascript - 编写内联 javascript if 语句 onclick 或任何其他 JS 事件?

javascript - 函数在 Chrome 中工作正常,但在 Firefox 中不起作用

javascript - 如何防止我的数组在 React JS 中的 onChange 函数上一次又一次地更新?

html - 将鼠标悬停在另一个元素上时更改元素的属性

javascript - Angular-vs-scroll 不适用于表中的隐藏元素

html - 如何修复包装内的导航栏

选择之前会弹出 JavaScript 警报

jquery 悬停() IE7 和 IE8