【发布时间】:2018-06-28 21:31:36
【问题描述】:
我正在学习鼠标事件。目前,我的目标是拥有2 images on top of each other。例如,您将鼠标移到图像上并看到一个弹出窗口。当您将鼠标移开时,弹出窗口就会消失。我认为这是很常见的事情。
因为我有一个图像在另一个前面,我的研究表明我需要使用mouseleave
https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_onmousemove_leave_out
我遇到的问题是,当我尝试隐藏或删除隐藏类(使图像可见或不可见)时,我得到了闪烁效果
这个 sn-p 显示一切
var inst = document.getElementById("instrument");
inst.addEventListener("mouseover", function() {
toggleEdit(true);
})
inst.addEventListener("mouseleave", function() {
toggleEdit(false);
})
var edit = document.getElementById("edit");
var i = 0;
function toggleEdit(isShow) {
console.log(i++);
edit.className = edit.className.replace(" hide", "");
if (!isShow) {
edit.className += " hide";
}
}
.parent {
position: relative;
margin-left: 40%;
background: green;
}
.image1 {
position: absolute;
top: 0;
left: 0;
}
.image2 {
position: absolute;
top: 0px;
}
.image2 img {
max-width: 20px;
}
.hide {
visibility: hidden;
display: block;
}
<div class="parent">
<img class="image1" src="https://placehold.it/100" id="instrument" />
<a id="edit" href="#" class="image2 hide"><img src="https://cdn.pixabay.com/photo/2017/06/06/00/33/edit-icon-2375785_960_720.png" /></a>
</div>
如何防止这种闪烁?
【问题讨论】:
-
你根本不需要 JS。它可以通过 CSS 使用
:hover来实现。 -
...它可以@JeremyThille?我认为元素上的悬停事件不会影响 CSS 中另一个元素的样式?
-
大多数弹出窗口实际上并不是移动到另一个的不同元素或图像。正如 Jeremy 所说,它们只是 css 的变化,所以元素永远不会改变。
-
css 中有相邻的子选择器。否则将悬停事件放在两个元素的父元素上。
parent:hover childIdentifier.
标签: javascript html