假设我有4个动态生成的div,每个div都有相同的类,并且有唯一的数字ID,就像这样。每个包含一个绝对定位的div,宽度和高度均为100%,因此在显示时,它会填充整个div。
<div class="my_class" id="1">
<div class="overlay"></div>
</div>
<div class="my_class" id="2">
<div class="overlay"></div>
</div>
<div class="my_class" id="3">
<div class="overlay"></div>
</div>
<div class="my_class" id="4">
<div class="overlay"></div>
</div>
<style>
.overlay {
display:none;
}
</style>
当我将鼠标悬停在其中一个div上时,我想要那个div,而其他任何一个都没有显示叠加,然后当我停止悬停时,叠加div应该消失。有关如何使用jquery执行此操作的任何想法?这就是我尝试过的。
$('document').ready(function(){
$('.my_class').mouseenter(function(){
var id = $(this).attr("id");
$("#"+ id +" div").fadeTo("fast", 1);
$("#"+ id +" div").mouseleave(function(){
$("#"+ id +" div").fadeTo("fast", 0);
});
});
});
答案 0 :(得分:0)
在mouseenter
回调中只需使用$(this).find来查找其中的div。
在mouseleave
回调中添加mouseenter
回调是一个坏主意。每次鼠标进入父div时都会添加一个新的回调。
这是你想要做的吗?
$('document').ready(function () {
$('.my_class').mouseenter(function () {
var id = $(this).attr("id");
$(this).find("div").fadeTo("fast", 1);
});
$('.my_class').mouseleave(function () {
$(this).find("div").fadeTo("fast", 0);
});
});
答案 1 :(得分:0)
Id将其重写为:
$('document').ready(function(){
$('.my_class').mouseenter(function(){$(this).fadeTo("fast", 1);});
$('.my_class').mouseleave(function(){$(this).fadeTo("fast", 0);});
});
您正在将mouseleave
附加到mouseenter
内,我想您不会这样做。
答案 2 :(得分:0)
然而,原始代码对我有用;如果您在divs
之间不规律地移动光标,事件会不断淡化叠加层。
为了解决这个问题,我将原始的mouseenter
和mouseleave
事件替换为one
,类似于on
,但仅捕获事件一次。
$('.my_class').one('mouseenter', function() {...});
$('.my_class').one('mouseleave', function() {...});
然后我将mouseenter
事件放在mouseleave
内,这样我们就可以在离开活动div之后继续对hover
效果进行处理。
如果您对CSS
感兴趣只有解决方案:
答案 3 :(得分:0)
我认为这个解决方案可能有点整洁。还有一个fiddle。
$('.my_class').mouseenter(function() {
$(this).children('.overlay').fadeTo(1000, 0);
})
$('.my_class').mouseleave(function() {
$(this).children('.overlay').fadeTo(1000, 1);
})