onmouseover事件行为不端
onmouseover event misbehaving
我试图制作某种窗帘式效果,并将onmouseover
应用于父div
id。我不明白为什么当我将鼠标悬停在子div
而不是父div
上时会产生这种效果。
var left = document.getElementById("left");
var right = document.getElementById("right");
function curtain() {
left.style.transform = "rotate(30deg)";
right.style.transform = "rotate(-30deg)";
}
function back() {
left.style.transform = "rotate(0deg)";
right.style.transform = "rotate(0deg)";
}
CSS:
#animate {
width: 400px;
margin: auto;
position: relative;
}
img {
width: 100%;
}
#left {
position: absolute;
top: 0;
right: 50%;
padding: 0;
margin: 0;
width: 50%;
transform-origin: 0 0;
}
#right {
position: absolute;
top: 0;
right: 0%;
padding: 0;
margin: 0;
width: 50%;
transform-origin: 100% 0;
}
HTML:
<div id="animate" onmouseover="curtain()" onmouseout="back()">
<div id="left">
<img src="http://www.uwphotographyguide.com/images/Articles/image-overlay-3107.jpg">
</div>
<div id="right">
<img src="http://s3.freefoto.com/images/15/78/15_78_19_web.jpg">
</div>
</div>
我认为答案是你让孩子的位置是绝对的。这样,它们就不再是父div的"一部分"。在您的情况下,外部div没有高度,因为子div在页面上是绝对的。
mouseover属性向下委派。所以父母和孩子都会倾听。阅读这篇文章,了解事件侦听器如何工作的更多信息https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
之所以发生这种情况,是因为与图像大小相比,外部div高度较小。所以当您将鼠标移到外部div之外时,会调用back事件。只需给外部div一些最小高度。这是工作代码
var left = document.getElementById("left");
var right = document.getElementById("right");
function curtain() {
left.style.transform = "rotate(30deg)";
right.style.transform = "rotate(-30deg)";
}
function back() {
left.style.transform = "rotate(0deg)";
right.style.transform = "rotate(0deg)";
}
#animate {
width: 250px;
margin: auto;
position: relative;
height: 225px;
border: 1px solid;
}
img {
width: 100%;
}
#left {
position: absolute;
top: 0;
right: 50%;
padding: 0;
margin: 0;
width: 50%;
transform-origin: 0 0;
}
#right {
position: absolute;
top: 0;
right: 0%;
padding: 0;
margin: 0;
width: 50%;
transform-origin: 100% 0;
}
<div id="animate" onmouseover="curtain()" onmouseout="back()">
<div id="left">
<img src="http://www.uwphotographyguide.com/images/Articles/image-overlay-3107.jpg">
</div>
<div id="right">
<img src="http://s3.freefoto.com/images/15/78/15_78_19_web.jpg">
</div>
</div>
根据我的理解,我认为如果您将鼠标悬停在子div上,则不会对子div产生任何影响,只有当您将鼠标鼠标悬停在父div上时才会发生这种情况。
之所以会发生这种情况,是因为子div在父div的范围内。
所以你必须管理这些div。调整父div的高度,它就会正常工作。
相关文章:
- onmouseover事件行为不端
- 构造函数中的事件处理程序与构造函数外的事件处理函数的行为不同
- 在文本区域禁用javascript定义的keydown事件并恢复默认行为
- 键控事件行为与预期不符
- $_GET PHP行为不端
- fullCalendar动态事件单击行为
- 谷歌分析点击事件未显示在行为>事件仅在实时中看到>事件
- 意外的粘贴事件行为
- 错误:'这'对象不正确;在JQuery中单击事件-单击时的意外行为
- 是否存在添加两个相同事件处理程序的默认行为
- 表单提交事件中this.submit()的行为
- JavaScript事件委派-行为
- Jquery幻灯片显示动画行为怪异(事件触发,队列中堆积)
- 循环行为不端的条件in
- Jquery.validate行为不端(不总是有效)
- jquery addClass有一次行为不端,正在处理另一次
- Firefox插件:DOMWindowsUtils.sendKeyEvent行为不端
- 咕哝的复制任务行为不端
- 由于JavaScript中的StreamWrite,WP8应用程序行为不端
- 奇怪的行为悬停事件jQuery