2012-01-14 39 views
2

我與我的項目,結合jQuery/Coffeescript有問題。jQuery隱藏和顯示不正確(多次)

在我的主頁上,我有一個文本塊,下面有一個箭頭。 在那裏,有按鈕,每當我將鼠標放在其中一個按鈕上時,我希望文本塊+箭頭移動。 我使用jQuery UI庫執行此操作,方法hideshow

在我的CSS代碼中,我做了幾個類:.position1,.position2.position1。每次用鼠標懸停在其中一個按鈕上時,我都希望文本塊移動到特定的位置,所以我改變它的類(如果有人有更好的解決方案,我很樂意聽到它)。

現在我遇到的問題是,有時箭頭皮和之後彼此出現多次(特別是當我移動鼠標非常快按鈕之間)

的簡單(部分)版本我的jQuery是如下:

var appear_arrow = function(to_position, show_delay) { 
    removeClasses($('.arrow')); 
    $('.arrow').addClass(to_class); 
    $('.arrow').delay(show_delay).show('slide', 'slow'); 
}; 

var to_position1 = function() { 
    $('.arrow').hide(0); 
    $('.text_block').hide(appear); 
    switchClass($('.text_block')); 
    $('.text_block').show(appear); 
    appear_arrow('position1', delay); 
}; 

$('.button1').hover(
    function() { 
    to_position1(); 
    }, 
    function() {} 
); 

我的問題,沒有任何人知道爲什麼有時候箭頭出現多次。或者有人建議如何更好地做到這一點?

回答

0

jQuery將給定元素上的所有動畫排隊,而不是先將其重置。

$("selector").stop(); // stops animations on matched elements and resets queue 

一個stop()。淡入(「慢」),但是將不透明度的元素了,當你叫停,這可以通過例如隱藏/立刻顯示它,然後做了充分的褪色來解決啓動在新的地點 - 任何看起來最適合你的東西。

在一個側面說明:

看來你寫的包裝功能jQuery的removeClass和toggleClass方法。 removeClass()如果調用沒有參數刪除所有類,所以你可能只是使用這些如果在jQuery上下文無論如何(假設你的方法沒有額外的功能)。

看到您打電話$('。arrow')的頻率,您可能需要緩存您的選擇器,至少每次迭代,然後將它傳遞給出現在__row()。

var $arrow = $('.arrow') 
+0

親愛的@Flo,感謝您的快速回復。事情是,我希望它有點順利,然後突然轉換對我來說不是一個很好的選擇。另外,在我的原始代碼(用咖啡腳本編寫)中,我正在使用這些變量。 – Ron 2012-01-14 14:34:48

+0

然後您可以在添加新的定位類並再次顯示之前停止()隊列並添加一個增量動畫。 新動畫將根據元素的狀態(即不透明度)計算動畫時間(箭頭當前處於0.2不透明度 - >動畫持續時間* = 0.2)。但是我可能會過度看待事情。 – Flo 2012-01-14 14:52:36