2014-09-18 120 views
0

我有這樣的感覺,我的問題是非常愚蠢的,但我無法修復它。我在一個容器中有兩個div,其中一個默認隱藏。當鼠標移到父div上時,我想用slideDown顯示隱藏的div,並隱藏另一個div。當我將鼠標從div上移到bottom時,它會很好地工作,但如果我從底部移動鼠標,它會上下滑動一段時間。在這裏,我有一個小提琴:jQuery mouseenter/mouseleave問題

[編輯]

我忘了說,我需要這與動態創建的div工作。

http://jsfiddle.net/7gva4fad/

jQuery(document).on({ 
 
    mouseenter: function() { 
 
     jQuery(this).find('.msg').hide(); 
 
     jQuery(this).find('.conv').slideDown(300);   
 
    } 
 
}, ".tooltip"); 
 

 
jQuery(document).on({ 
 
    mouseleave: function() { 
 
     jQuery(this).find('.conv').slideUp(300); 
 
     jQuery(this).find('.msg').show(); 
 
    } 
 
}, ".tooltip");
.tooltip{ 
 
    width: 250px; 
 
    height: 30px; 
 
    border: 1px solid #000; 
 
} 
 
.conv{ 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
 
<div class="tooltip"> 
 
    <div class="conv">Hello again</div> 
 
    <div class="msg">Hello world</div> 
 
</div>
任何想法完全理解。

+0

通常考慮將相關代碼包含在消息正文中,並提供jsfiddle鏈接。這可以確保您的問題在將來即使您的代碼不再託管在jsfiddle上仍然適用。 – 2014-09-18 19:38:57

+0

將鼠標懸停在元素上時,它立即隱藏'.msg',父容器('.tooltip')突然變爲0的高度,這意味着鼠標離開元素並觸發離開函數。 – JRulle 2014-09-18 19:43:54

+0

謝謝@WoodrowBarlow,我會記住這一點(: – Cassandra 2014-09-18 19:49:26

回答

0

如果先隱藏的.msg DIV的mouseleave事件被稱爲,因爲在.tooltip DIV具有高度0

嘗試是這樣的:

jQuery(document).on({ 
    mouseenter: function() { 
     jQuery(this).find('.msg').stop(false, true).slideUp(300); 
     jQuery(this).find('.conv').stop(false, true).slideDown(300);   
    } 
}, ".tooltip"); 

jQuery(document).on({ 
    mouseleave: function() { 
     jQuery(this).find('.conv').stop(false, true).slideUp(300); 
     jQuery(this).find('.msg').stop(false, true).slideDown(300); 
    } 
}, ".tooltip"); 

http://jsfiddle.net/7gva4fad/2/

+0

我結束了使用你的解決方案,因爲它適合我的項目(:並且不能使用'on({hover'和我需要它,因爲我的div是動態創建的。你的答案完美無缺,謝謝( – Cassandra 2014-09-18 20:11:54

+1

我剛換了你的解決方案儘可能少;)但誰給了我-1,爲什麼? – algorhythm 2014-09-18 20:13:35

1

jQuery(function($) { 
 

 
    $('.tooltip').hover(function() { 
 
     $('.msg, .conv', this).stop().slideToggle(); 
 
    }); 
 
    
 
});
.tooltip{ 
 
    width: 250px; 
 
    border: 1px solid #000; 
 
} 
 
.conv{ 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="tooltip"> 
 
    <div class="conv">Hello again</div> 
 
    <div class="msg">Hello world</div> 
 
</div>

+0

它的工作原理非常完美(:,只是一個問題,'hover'和'mouseenter' /'mouseleave'有什麼區別?哪一個更好?非常感謝你(: – Cassandra 2014-09-18 19:57:23

+0

@Cassandra'.hover()'方法(NB:* not * '.on('hover'...)'!)是* .on *'mouseenter mouseleave'事件監聽器的確切副本* – 2014-09-18 19:58:42

+0

同樣,您可以使用'$(this).bind('mouseenter ','mouseleave')',很確定那裏沒有真正的區別。 – Dpeif 2014-09-18 19:59:54