我有这个小问题,我正在请求你的帮助。 我有一个 div 元素,其中有一个 img 元素,就像这样
<div id="parent" onmouseover="MyFuncHover()" onmouseout="MyFuncOut()">
<img id="child" src="button.png" style="visibility: hidden" />
</div>
<script type="text/javascript">
function MyFuncHover() {
// Here I have some code that makes the "child" visible
}
function MyFuncOut() {
// Here I have some code that makes the "child" invisible again
}
</script>
正如您所见,图片是 div 的子图片。我希望只有当我离开 div 时,孩子才会消失。然而,看起来当我将鼠标移到图像上时,会调用 MyFuncOut()函数(因为,我想,我通过悬停图像离开div)。我不希望这种情况发生。我希望只有在离开 div 区域时才能调用 MyFuncOut()函数。
我不知道当你将鼠标移到子控件上时,它的父母会调用mouseout事件(即使我在孩子身上,我仍然在父母身上)。我被困在这里,我需要你的一些好建议。谢谢!
更改
O.K。当我“抓出”孩子时,事件冒泡不会向父母发送“mouseout”事件。当我“鼠标悬停”孩子时,它也不会向父母发送“鼠标悬停”事件。那不是我需要的。当我“鼠标悬停”孩子时,我需要父母的“mouseout”事件不被发送。得到它?当我不希望将子项上的单击事件传播到父项时,事件冒泡很有用,但这不是我的情况。奇怪的是,我在同一个父级中有其他元素,当我“鼠标悬停”它们时,它们不会触发父级的“mouseout”事件。
答案 0 :(得分:23)
你可以在jquery中使用“mouseenter”和“mouseleave”事件,这里是下面的代码,
$(document).ready(function () {
$("#parent").mouseenter(function () {
$("#child").show();
});
$("#parent").mouseleave(function () {
$("#child").hide();
});
});
上面是附加一个事件,
<div id="parent">
<img id="child" src="button.png" style="display:none;" />
</div>
答案 1 :(得分:6)
你可以使用下面的解决方案,它是纯粹的javascript,我成功使用。
var container = document.getElementById("container");
var mouse = {x: 0, y: 0};
function mouseTracking(e) {
mouse.x = e.clientX || e.pageX;
mouse.y = e.clientY || e.pageY;
var containerRectangle = container.getBoundingClientRect();
if (mouse.x > containerRectangle.left && mouse.x < containerRectangle.right &&
mouse.y > containerRectangle.top && mouse.y < containerRectangle.bottom) {
// Mouse is inside container.
} else {
// Mouse is outside container.
}
}
document.onmousemove = function () {
if (document.addEventListener) {
document.addEventListener('mousemove', function (e) {
mouseTracking(e);
}, false);
} else if (document.attachEvent) {
// For IE8 and earlier versions.
mouseTracking(window.event);
}
}
我希望它有所帮助。
答案 2 :(得分:3)
只需在MyFuncOut函数中添加一个if语句,该函数检查目标不是图像
if (event.target !== imageNode) {
imageNode.style.display = 'none'
}
答案 3 :(得分:1)
我也遇到过这个问题,无法让它发挥作用。这就是我所做的。它更容易,而不是JavaScript,所以它更快,无法关闭。
div.container {
opacity:0.0;
filter:alpha(opacity="00");
}
div.container:hover {
opacity:1.0;
filter:alpha(opacity="100");
}
您甚至可以为不透明度添加CSS3过渡,使其更加流畅。
答案 4 :(得分:0)
只需设置子元素的css指针事件:无; 参见示例:
#parent {
width: 500px;
height: 500px;
border: 1px solid black;
}
#child {
width: 200px;
pointer-events: none; # this does the trick
}
<div id="parent" onmouseover="MyFuncHover()" onmouseout="MyFuncOut()">
<img id="child" src="https://i2.wp.com/beebom.com/wp-content/uploads/2016/01/Reverse-Image-Search-Engines-Apps-And-Its-Uses-2016.jpg?w=640&ssl=1" />
</div>
<script type="text/javascript">
function MyFuncHover() {
console.log("mouse over")
}
function MyFuncOut() {
console.log("mouse out")
}
</script>