2011-06-24 43 views
3

我必須想象,這是一個常見的使用情況的JavaScript/jQuery,所以請原諒我,如果它在網站上的其他地方,我搜索它,找不到這個基本用例。最簡單的方法,只承認一系列的JavaScript/jQuery事件的最新

我有一個可見的div(A)。懸停該div顯示一些其他div(B & C)。取消任何這些div(A,B或C)將隱藏兩個顯示的div(B & C)。

夠簡單吧?問題在於,當你在快速連續的盤旋和反覆徘徊時,這種簡單的行爲會導致醜陋,因爲事件全部疊加,然後就像一個手風琴家一段時間一樣。

我試圖使typewatch函數代入公式:

var typewatch = (function(){ 
     var timer = 0; 
     return function(callback, ms){ 
     clearTimeout (timer); 
     timer = setTimeout(callback, ms); 
     } 
    })(); 

但我無法正確地使用它,我想(也許我會打電話給調用typewatch本身就是一個單一的自定義切換功能, 或者其他的東西?)。

爲便於理解,這裏是確切的情況下一個的jsfiddle: http://jsfiddle.net/tchalvakspam/KG3P9/7/

但一般來講,我如何能趕上多個事件和榮譽只是最近的一次?

+0

您沒有使用jQuery的本土動畫的能力(更具體['.stop()'](http://api.jquery.com/stop/)),因爲...... –

+0

反正這個東西沒有編碼......離開A ...時要手風琴(?)去B! –

+0

哎呀,是的,我意識到從a移動到b會導致問題,我應該在整個頁腳容器上觸發。 – Kzqai

回答

1

這實際上是用來打擾我很多東西。在製作動畫之前,請致電$.stop(),它將凍結任何目前的動畫,並提供您提供的新目標。

$("#container") 
    .mouseenter(
    function(){ 
    $(".panels", this).stop(true, true).slideDown(); 
    }) 
    .mouseleave(
    function(){ 
    $(".panels", this).stop(true, true).slideUp(); 
    } 
); 

這遵循jQuery的API爲$.stop()方法本身中提供作爲它們呈現類似的例子中,使用單個圖像的文檔。

演示:http://jsbin.com/adeqef/2/edit

+0

當您將鼠標左右擺放在它上面時並不完美,但對於我目前的使用情況來說,它可以正常工作。 – Kzqai

+0

@Tchalvak這絕對不是完美的,但它幾乎在那裏;) – Sampson

+0

是的。在這裏,我認爲我的手上有一個簡單的用例......:p – Kzqai

2

我使用e.preventDefault()和jQuery事件來停止事件向上傳播樹。