我有懸停(的mouseenter,鼠標離開)執行的動畫的功能。我試圖解開功能(因爲我不希望用戶與它交互),我點擊一個按鈕後。這有效,但我遇到的問題是重新綁定懸停功能,以便當用戶再次單擊該按鈕時,動畫和懸停效果將重新使用。
不知道這是否是正確的方式來實現這一點,但希望我可以得到一些關於這個問題的幫助。謝謝。
我有懸停(的mouseenter,鼠標離開)執行的動畫的功能。我試圖解開功能(因爲我不希望用戶與它交互),我點擊一個按鈕後。這有效,但我遇到的問題是重新綁定懸停功能,以便當用戶再次單擊該按鈕時,動畫和懸停效果將重新使用。
不知道這是否是正確的方式來實現這一點,但希望我可以得到一些關於這個問題的幫助。謝謝。
不斷解綁和重新綁定通常不是最好的方法。它需要比需要更多的工作。
一種選擇是在懸停時在元素上設置一個類,並讓其他代碼在調用時檢查該類的存在。
$('.myelem')
.on("mouseenter", function() {
$(this).addClass("hovering");
})
.on("mouseleave", function() {
$(this).removeClass("hovering");
})
.on("click", function() {
if ($(this).hasClass("hovering") === false) {
// run the code
}
});
類似的方法是添加了類,但使用事件委託的方法來控制行爲,使得選擇被定義爲在不具備"hovering"
類元素的工作。
$('.myelem')
.on("mouseenter", function() {
$(this).addClass("hovering");
})
.on("mouseleave", function() {
$(this).removeClass("hovering");
});
$("#container").on("click", ".myelem:not(.hovering)", function() {
// run the code
});
+1爲良好的編程方法 – StaticVariable
'$ .hasClass()'將始終返回一個布爾型'true'或布爾型'false',所以'=== false'並不是真的需要。另外,您可以將重複的$ .on調用與一個調用並使用'$ .toggleClass'。從性能的角度來看,我對最後一點警惕,我認爲你的意思是['.myelem:not(.hovering)'](http://api.jquery.com/not-selector/),一個':'。 –
@JaredFarrish:是的,我的'.not'應該是':not'。我會更新。謝謝。我做了'=== false'有兩個原因。首先是我用一個「邏輯上沒有」的操作符鍵入它,但我想更加清楚。其次,我幾乎總是使用'===',僅僅是出於習慣。這是一個個人編碼標準。但是你是對的,如果我在這種情況下使用'==',比較算法將是相同的。我做了2個處理程序,因爲我猜測還有更多工作要做。我可以做一個,並測試事件類型,但兩個似乎更清晰。另外'toggleClass'需要第二個參數讓我感覺舒適。 –
下面是使用class
名稱,以保持該元素的從反應到mouseenter mouseleave
多個阻塞上下文的演示:
<div class="highlight">
Hover Me
<button type="button">Stop Hoverable</button>
</div>
<div class="highlight">
Hover Me
<button type="button">Stop Hoverable</button>
</div>
<div class="highlight">
Hover Me
<button type="button">Stop Hoverable</button>
</div>
$('.highlight')
.on('mouseenter mouseleave', function(){
if (!$(this).is('canceled')) {
$(this).toggleClass('hovered');
}
})
.on('click', 'button', function(){
$(this).parent().toggleClass('canceled');
});
這是使得它的工作線:
if (!$(this).is('canceled')) {
+1我想我誤解了OP想禁用哪些事件。我認爲你的意圖是什麼。 –
哦,對,我甚至沒有注意到它們的區別。 –
你想設置一個阻塞變量和det點擊'按鈕'切換'hover'。我會建議'$('#theElement')。data('inHover',true)'。或者,也可以使用類名和'if($('#theElement')。is('。hoverable')){...魔術發生...}'。 –