嵌套的悬停事件,仅适用于最直接的悬停元素
Nested hover events, only apply to most direct hovered element
HTML:
<div class="outer">
<div class="inner">
</div>
</div>
CSS:
.outer {
outline: 1px solid green;
padding: 20px;
}
.inner {
outline: 1px solid red;
height: 50px;
}
.hover {
outline: 1px solid yellow;
}
JS:
$('.outer, .inner').on('mouseenter', function(e){
$(this).addClass('hover');
}).on('mouseleave', function(e){
$(this).removeClass('hover');
});
http://codepen.io/anon/pen/tEAiG/
有没有一种方法可以使悬停类只应用于直接悬停的元素?ie.当鼠标只在内部div中时,它是黄色的,而不是外部div?
由于您是通过自己添加类而不是使用CSS :hover
来处理悬停,因此在对mouseenter
做出反应时,您可以停止处理程序中事件的传播。
这样,如果处理程序对.intern做出反应,它将停止Propagation(),以防止事件也进入.eouter
另一个问题是,您必须输入外部并处理它才能到达内部,因此您将希望删除必须添加到父节点的悬停类。
在这个小提琴中演示
一种可能的方法是从外部div中删除悬停类,然后在鼠标位于内部div时将其应用于内部div,因为无论何时进入内部div,悬停类都会应用于两个div。
您可以通过为每个处理程序制作一个单独的处理程序来实现这一点。
$('.outer').on('mouseenter', function(e){
$(this).addClass('hover');
}).on('mouseleave', function(e){
$(this).removeClass('hover');
});
$('.inner').on('mouseenter', function(e){
$(this).addClass('hover');
$('.outer').removeClass('hover');
}).on('mouseleave', function(e){
$(this).removeClass('hover');
$('.outer').addClass('hover');
});
演示
当鼠标进入内部div时,可以移除类悬停在父div上像这样:
$('.outer, .inner').on('mouseenter', function(e){
$(this).addClass('hover');
$(this).parent(".outer").removeClass('hover');
}).on('mouseleave', function(e){
$(this).removeClass('hover');
$(this).parent(".outer").addClass('hover');
});
我觉得这有点像黑客,可以通过更具体地使用选择器来改进,而不是只为.exter和.internal 创建一个函数
示例:http://codepen.io/anon/pen/KzILE/
相关文章:
- 单击后使CSS悬停元素永久化
- 要在文本框中显示的悬停元素
- 如何在工具提示窗口小部件中获取悬停元素的id
- 鼠标悬停元素在使用量角器时不起作用
- 在不影响布局的情况下降低鼠标悬停元素周围的灵敏度的简单方法是什么
- 如何在 JS/Jquery 中组合多个悬停元素
- 降低非悬停元素的不透明度
- 鼠标悬停元素时未触发的事件
- 获取显示菜单的悬停元素的属性
- 如何在悬停元素时将 JavaScript 链接到以更改元素的图片并显示块第三个元素
- 如何在不悬停元素的情况下使用 javascript 更改鼠标光标
- 如何将CSS应用于除悬停元素之外的其他元素
- 父级的悬停元素
- 计算用户使用jquery或javascript悬停元素的秒数
- 不使用id's,用jquery识别悬停元素
- 如何在Firebug中检查网页的动态悬停元素
- 覆盖悬停元素中的悬停样式
- 获取悬停元素的背景色
- 事件,用于突出显示悬停元素
- Jquery颜色选择器悬停元素