2011-11-01 54 views
0

有人可以解釋爲什麼這不起作用嗎?jQuery延遲不適用於mouseout

jQuery('.right-et-tooltip').delay(800).mouseout(function(){ 
     jQuery(this).find('.right-et-tooltip-box').animate({ opacity: 'hide', left: '-100px' }, 30); 
}); 

我沒有得到任何延遲。只要鼠標一下,BOOM就會消失。

謝謝,我已經嘗試了一些東西,所以只是沮喪。

+0

你能提供的HTML也是如此。我建議你把它扔在jsfiddle.net – hafichuk

+0

http://jsfiddle.net/zGtBN/ – oneadvent

+0

哦,但不能讓它在那裏工作...缺少的東西..不知道是什麼 – oneadvent

回答

1

您的延遲沒有做任何事情,因爲它綁定到jQuery選擇器,而不是綁定到mouseout處理程序中的函數。

試試這個...

jQuery('.right-et-tooltip').mouseout(function(){ 
     jQuery(this).find('.right-et-tooltip-box').delay(800).animate({ opacity: 'hide', left: '-100px' }, 30); 
}); 

你的jsfiddle應用了修正...

http://jsfiddle.net/zGtBN/2/


EDIT(一個側面說明):

對我們來說會更好e的mouseenter & mouseleave方法而不是mouseovermouseout方法傾向於導致鼠標懸停期間快速閃爍的影響。

Then you can simply combine the mouseenter and mouseleave handlers into one by using the jQuery .hover() method.

你完全相同的兩個功能insterted到這裏.hover()方法...

http://jsfiddle.net/zGtBN/3/


編輯2:

當你之前重新進入請假動畫完成,動畫將完成我排隊。如果你輸入&確實快幾次,你會讓所有這些動畫在停止之前閃爍。

爲了防止動畫隊列從疊加起來,創造它從何上了一個新問題,開/關,因爲mouseleave延遲,use a jQuery .stop(true, false)在這樣的mouseenter功能...的

jQuery(this).find('.right-et-tooltip-box').stop(true,false).animate({ opacity: 'show', left: '-100px' }, 30); 

mouseenter,它立即停止任何mouseleave動畫。 「clearQueue」選項上的true清除了動畫隊列,「jumpToEnd」選項上的false表示停止當前動畫,而不是立即完成。

修改演示...

http://jsfiddle.net/zGtBN/4/

+0

寫得很好,我做了這個改變,以鼠標和鼠標,它仍然閃爍,但它回來了...我相信我會找到一種方法,使它不這樣做。它是這樣做的,因爲我'離開',所以它開始延遲閃爍,然後顯示備份。 – oneadvent

+0

@oneadvent:這是一個不同的問題。這是因爲在動畫完成之前進入&離開時動畫正在排隊。使用jQuery的'.stop()'方法來停止動畫並清除隊列。查看我最新的演示編輯。 – Sparky

+1

哇,那很好。我喜歡它,再次感謝! – oneadvent