2013-09-26 26 views
1

好吧,也許這是一個愚蠢的問題,但我是一個jQuery和JavaScript的一般新手,所以我找不到解決方案(也許我在錯誤辦法)。停止mouseenter傳播點擊相同的元素

我有一個菜單,可以在短時間內在「mouseeenter」和「mouseleave」上創建一些動畫。但它也會點擊「點擊」功能: - 當鼠標繼續移動時, 「風格位置到另一個 - 鼠標熄滅時,相同的元素將移動到其原始的」頂部「樣式位置。 - 當鼠標點擊它時,發生了一些事情(html5節滑動css3轉換) 沒有問題,如果我留在元素,我在「mouseenter」動畫結束後點擊它,但如果我快點擊結束之前.animate函數,當點擊事件傳播完成時,.animate仍會影響我的元素並將它移動到錯誤的位置。

所以問題是:如何通過同一元素中的點擊功能來停止mousenter傳播? 我嘗試使用.unbind,它適用於mouseleave,但不適用於mousenter。

下面是一個示例代碼創建這樣一個問題:

$('#control_a').bind({ 
    mouseenter: function(e) { 
     $("#element").stop().animate({top: "-=100px"}, 200); 
    }, 
    mouseleave: function(e) { 
     $("#element").stop().animate({top: "50%"}, 200); 
    } 
}); 
$("#control_a").click(function(){            
    $("#control_a").unbind('mouseleave mouseenter'); 
     $("#element").css('top' , '50%'); 
    // something happens 
}); 

非常感謝您

+1

工作對我來說沒有問題。 [見我的小提琴](http://jsfiddle.net/ZBLLD/)。如果單擊'#control_a',它將成功解除綁定'mouseenter'和'mouseleave'事件的功能。 – Moob

+0

您知道,通過解除鼠標事件,##元素不會在下次用戶懸停在#control_a上時移動?那是你要的嗎?如果不是,請不要解除綁定。 [查看更新的JSFiddle](http://jsfiddle.net/ZBLLD/1/) – Moob

+0

@Moob,而不是讓它綁定(因爲你會在鼠標離開時觸發動畫)我會[在鼠標左鍵重新綁定](http: //jsfiddle.net/peteng/ZBLLD/2/) – Pete

回答

0

試試這個你鼠標點擊:

$("#control_a").click(function(){            
    $("#control_a").unbind('mouseleave mouseenter'); 
    $("#element").stop().css('top' , '50%'); 
    // something happens 
}); 
+1

太棒了!你和.stop()是我的救星! XD –