2012-12-18 128 views
0

我有兩個div:紅色的藍色。 我想當用戶將這個fadeOut懸停在紅色並且當懸停在背景(當他突然出現藍色時)紅色淡入。 (更令人驚訝的是,當我徘徊在背景中但當我將鼠標移到背景上時,紅色褪色了嗎?我不明白)懸停和切換jQuery

這裏的例子生活:http://jsfiddle.net/DpD8S/

HTML:

<div id="background"> 
    <div id="red"></div> 
    <div id="blue"></div> 
</div>​ 

CSS:

#red{ 
    position:absolute; 
    top: 20px; 
    left: 20px; 
    width: 60px; 
    height: 30px; 
    background-color:red; 
    cursor: pointer; 
    z-index: 1; 
    } 

#blue{ 
    position:absolute; 
    top: 20px; 
    left: 20px; 
    width: 60px; 
    height: 30px; 
    background-color:blue; 
    cursor: pointer; 
    } 

#background{ 
    position: relative; 
    margin: 0 auto; 
    width:300px; 
    height: 300px; 
    border: 1px solid; 
    border-color:#CCC; 
    text-align: center; 
    cursor: pointer; } 

JQUERY:

$(function(){  
    $("#red").hover(function() { 
     $("#red").fadeOut(); 
    }); 

    $("#background").hover(function() { 
     $("#red").fadeIn("normal"); 
    }); 
})​ 
+1

如果我理解正確的話,的jsfiddle就像你所描述的 – dualed

+0

「我想,當用戶將鼠標懸停在紅色,這種淡出當懸停在背景中,紅色淡入「現在,當我將鼠標懸停在背景上時,紅色不會淡入。我不明白爲什麼? – Nrc

+0

我想我明白了...... – dualed

回答

1

做一個透明的穩定區域,它會捕獲你的事件。

<div id="background"> 
    <div id="blue"></div> 
    <div id="red"></div> 
    <div id="transparent"></div> 
</div>​ 

CSS:

#red{ 
    position:absolute; 
    top: 20px; 
    left: 20px; 
    width: 60px; 
    height: 30px; 
    background-color:red; 
    cursor: pointer; 
    z-index: 1; 
    } 

#blue{ 
    position:absolute; 
    top: 20px; 
    left: 20px; 
    width: 60px; 
    height: 30px; 
    background-color:blue; 
    cursor: pointer; 
    } 

#transparent { 
    position:absolute; 
    top: 20px; 
    left: 20px; 
    width: 60px; 
    height: 30px; 
    background-color:none; 
    cursor: pointer; 
    z-index: 2; 
    } 

#background{ 
    position: relative; 
    margin: 0 auto; 
    width:300px; 
    height: 300px; 
    border: 1px solid; 
    border-color:#CCC; 
    text-align: center; 
    cursor: pointer; 
} 
​ 

然後使用懸停(函數(),()的函數)。不要忘了停止執行事件的功能有:

$(function(){  
    $("#transparent").hover(function() { 
     $("#red").stop().fadeOut(); 
    }, function() { 
     $("#red").fadeIn("normal"); 
    }); 

})​ 

http://jsfiddle.net/DpD8S/14/

+0

這個問題可以解決而不添加無用的元素到' DOM'。 –

+0

這是一個聰明的解決方案,它在小提琴中工作。因爲這是一個非常簡單的例子,我遇到了很多div。我不確定我是否能夠在那裏應用它。無論如何,它給了我一個新的可能性。謝謝!! – Nrc

+0

這是我最喜歡的選擇,因爲它適用於任何情況,如果div的大小或位置不一樣,都無關緊要。我也嘗試過使用mouseenter和mouseleave的變體:http://jsfiddle.net/DpD8S/22/ – Nrc

2

您的問題可能是hover的定義。

hover(handlerIn(eventObject) , handlerOut(eventObject) ) 
hover(handlerInOut(eventObject) ) 

這意味着當你通過只有一個功能,它被稱爲爲mouseenter以及mouseleave。您應該使用這些事件或通過兩項功能hover

此外,這是非常「倒退」。當你進入它時隱藏東西將永遠是一個問題。所以這就是爲什麼我現在重命名你的div。當您輸入#inactive時應顯示#active,並且當您離開#active時應隱藏#active

這裏有一個小提琴http://jsfiddle.net/MwQaf/1/

+0

@Nrc這是因爲當你隱藏紅色時你「輸入」藍色。如果您將第二個處理程序附加到'#background'的'mouseenter'處理程序,它應該可以工作 – dualed

+0

您的意思是?:http://jsfiddle.net/DpD8S/13/您可以直接在小提琴中嘗試。我認爲這是行不通的 – Nrc

+0

@Nrc我在那兒有點倉促。我更新了我的答案,使用它。 ;) – dualed

1

也許你寧願改變: $("#background").hover(...)$("#blue").mouseleave(...)

http://jsfiddle.net/DpD8S/18/

+0

你說的是一個很好的解決方案。但要小心你的小提琴不起作用。我認爲你是這個意思?:http://jsfiddle.net/DpD8S/18/ – Nrc

+0

是的,抱歉,謝謝你指出。 – IsisCode

+0

這是一個非常好的解決方案,因爲它非常簡單明瞭。但我認爲它只會起作用2個div具有相同的確切大小和位置。 – Nrc

0

懸停功能通常是這樣定義 -

$('#red').hover(function() { 
    $(this).fadeOut(); 
}, function() { 
    $(this).fadeIn(); 
}); 

第一個函數是.hover()的mouseenter部分。第二個功能是懸停的mouseleave部分。在你的情況下,背景div似乎對問題無關緊要。

+0

我在這裏嘗試它,它會造成一種異常的影響:http://jsfiddle.net/DpD8S/12/ – Nrc

+0

奇怪。我會和@Remi Breton的答案一起去,在那裏他將功能分開。我沒有想到懸停反應這種方式。 –

1

#backgrounddiv正在包裝另外兩個。 $('#background').hover()函數被調用,每當hover事件發生在#background,甚至其子女。

我相信你可以achieve what you want by doing this

$("#red").mouseenter(function() { 
    $(this).fadeOut(); 
}); 

$("#red, #blue").mouseleave(function() { 
    $("#red").fadeIn("normal"); 
}); 

然而,這會產生一個奇怪的行爲,因爲這兩個「變臉」動畫排隊。如果用戶快速進入和退出,div似乎沒有反應,並以怪異的方式進行動畫處理。

如果安裝插件是一個選項,你可以try this plugin to animate colors。這將使您甚至可以將元素數量減少到div本身。您還可以削減CSS並使用更清晰的JavaScript。 Check out the fiddle

+0

你說的話有道理,但你的例子在mouseleave上做了一些奇怪的動作。我試圖添加event.stopPropagation(),但它也沒有工作:http://jsfiddle.net/DpD8S/16/ – Nrc

+0

我只是想到了這一點;有什麼理由爲什麼CSS3不能用於你的情況? –

+0

奇怪的行爲是由'#red'元素在'fadeIn()'開始之前完成'fadeOut()'動畫引起的。 –