[英]Show overlay on hover over single div in set of divs with same class
假設我有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);
});
});
});
里面mouseenter
回調只是用$(本).find到里面找到只有股利。
添加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);
});
});
id將其重寫為:
$('document').ready(function(){
$('.my_class').mouseenter(function(){$(this).fadeTo("fast", 1);});
$('.my_class').mouseleave(function(){$(this).fadeTo("fast", 0);});
});
您要連接的mouseleave
里面mouseenter
,我想你不慣於說。
但是,原始代碼對我有用。 如果您在divs
之間不規則地移動光標,則事件會不斷淡入和淡出疊加層。
為了解決這個問題,我取代了原來mouseenter
和mouseleave
事件有one
這是類似on
,但只有一次的事件捕獲。
$('.my_class').one('mouseenter', function() {...});
$('.my_class').one('mouseleave', function() {...});
然后,我將mouseenter
事件放入mouseleave
以便在離開活動div之后可以繼續mouseleave
進行hover
效果。
如果您對僅CSS
解決方案感興趣:
我認為此解決方案可能會更簡潔一些。 也要擺弄 。
$('.my_class').mouseenter(function() {
$(this).children('.overlay').fadeTo(1000, 0);
})
$('.my_class').mouseleave(function() {
$(this).children('.overlay').fadeTo(1000, 1);
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.