问题描述
我有 8 张图片包含所有带有 .pic-link 类的段落(我使用该段落作为链接,因为它的 z-index 必须保持最高)。图片下方有一个 div,它最初是在 css 中为阴影效果设计的,它的类是 .shade.. 我想将鼠标悬停在 .pic-link 但更改 .shade 以使其背景 =“白色”...我想我可以在 css 中这样做 - .pic-link:hover:shade,但我想知道它javascript..这是我的尝试
var shade = document.querySelector(".shade");
var pic = document.querySelectorAll(".pic-
link");
for (var i = 0; i < pic.length; i++) {
pic[i].addEventListener("mouSEOver",function(event) {
shade.style.background = "white";
})
}
我知道我将不得不添加鼠标悬停,我只是在寻找逻辑......我的代码将为每张图片添加鼠标悬停,但与悬停在图片上的样式更改不匹配......我什至尝试过选择所有 .shade 类并编写 shade[i].style.background = "white" 但这更没有影响力。 编辑...HTML如下...
<div class="single-pic-container">
<div class="shade"></div>
<img src="./images/mobile/image-deep-earth.jpg" alt="picture of earth" class="pic mobile-pic">
<img src="./images/desktop/image-deep-earth.jpg" alt="picture of earth" class="pic desktop-pic">
<a href="#" class="pic-link"><p>
Deep <br> earth
</p></a>
</div>
一张图片设置为dislpay = "none";直到媒体查询。 并且容器 div .single-pic-container 是 display = "grid",所以我可以轻松地覆盖该段落。 另外我正在练习网格。
解决方法
您应该使用 backgroundColor
而不是 background
:
const pics = document.querySelectorAll('.pic-link');
const mouseOverHandler = (e) => { // e - it's an event.
// e.currentTarget - it's an access to an element-source of the event.
const shade = e.currentTarget.parentNode.querySelector('.shade');
shade.style.backgroundColor = '#ffffff';
};
const mouseOutHandler = (e) => {
const shade = e.currentTarget.parentNode.querySelector('.shade');
shade.style.backgroundColor = 'transparent'; // Set there background color as it was before
};
pics.forEach((pic) => {
pic.addEventListener('mouseover',mouseOverHandler);
pic.addEventListener('mouseout',mouseOutHandler);
});
如果元素将被销毁,则必须删除侦听器,以避免内存泄漏。因此,仅用作具有名称的事件侦听器函数。因为匿名函数不能在像 pic.removeEventListener('mouseover',function(e) { //... })
这样的表达式中删除。