【发布时间】:2017-04-12 01:52:33
【问题描述】:
我需要在将鼠标悬停在元素(触发器)上时显示HTMLElement,并在离开相同元素时隐藏它。
工作示例
这里显示/隐藏的元素没有悬停在触发元素上。
var div = document.createElement("div");
div.className = "d";
document.body.appendChild(div);
var hov = document.createElement("div");
hov.className = "h";
var hover = false;
var overEvent = "mouseenter";
var overOut = "mouseleave";
div.addEventListener(overEvent, function(e) {
if (hover) return;
document.body.appendChild(hov);
hover = true;
console.log("OVER");
});
div.addEventListener(overOut, function(e) {
if (!hover) return;
document.body.removeChild(hov);
hover = false;
console.log("OUT");
});
.d {
width: 100px;
height: 100px;
background-color: #ff9900;
z-index: 0;
}
.h {
width: 100px;
height: 100px;
top: 150px;
bottom: 150px;
background-color: #000000;
opacity: 0.5;
z-index: 1;
}
div {
position: absolute;
}
不工作
在这里,触发器被覆盖,事情变得奇怪:
var div = document.createElement("div");
div.className = "d";
document.body.appendChild(div);
var hov = document.createElement("div");
hov.className = "h";
var hover = false;
var overEvent = "mouseenter";
var overOut = "mouseleave";
div.addEventListener(overEvent, function(e) {
if (hover) return;
document.body.appendChild(hov);
hover = true;
console.log("OVER");
});
div.addEventListener(overOut, function(e) {
if (!hover) return;
document.body.removeChild(hov);
hover = false;
console.log("OUT");
});
.d {
width: 100px;
height: 100px;
background-color: #ff9900;
z-index: 0;
}
.h {
width: 100%;
height: 100%;
background-color: #000000;
opacity: 0.5;
z-index: 1;
}
div {
position: absolute;
}
在这种情况下,我可以看到在触发元素上移动鼠标时重复调用侦听器,导致这种有趣的间歇性不良效果被多次放置和移除。
当使用 mouseover 和 mouseout 作为事件时也会发生这种情况。
为什么会这样?
【问题讨论】:
-
因为
mouseover触发元素在 overlay box 后面,您需要使用click事件来打开覆盖或不要让覆盖覆盖它mouseover触发元素。
标签: javascript html css hover dom-events