我可能是這裏的一個笨蛋,但我無法弄清楚這一點;
我正在用javascript中的基本hover()函數構建一個水平菜單。當你離開錨點時,在懸停效果消失之前有一段短暫的時間。
所以我想要做的事情:在錨點的ID之後命名超時,其中mouseleave被觸發,以便在mouseenter上再次停止正確的超時。
上的MouseEnter我檢查哪個錨通過獲取ID徘徊,我取消此ID的超時和我的HVR-類添加到懸停錨:
var t = $(this).attr('id');
clearTimeout(t);
$(this).addClass('hvr');
和鼠標離開我想做的事基本上這個:
$(this).attr('id') = setTimeout('doSoemthing()',66);
但是這會導致錯誤,因爲表達式不允許在=的左邊。我想過這樣的事情:
但這也行不通,因爲它只是覆蓋變量t。相反,我想要「打印」Timeout-Name變量的值。如果我使用固定的Timeout-Names,一切都像魅力一樣,但每個鏈接只有一個(相同的)超時時間,但這並不是這樣。
有沒有辦法做到這一點?或者我離開賽道?
這是完整的功能:提前
$("nav a").hover(
function(){
// On MouseEnter
var t = $(this).attr('id');
clearTimeout(t);
$(this).addClass('hvr');
},function(){
// On MouseLeave
$(this).attr('id') = setTimeout(function(){doSomethingHere},66);
}
);
感謝,最好的問候。
無論您將用作解決方案:請永遠不要使用字符串作爲setTimeout的第一個參數。使用函數引用,而不是'setTimeout(doSomething,66)' – devnull69
感謝您指出了這一點。我在原始代碼中使用了一個函數,但想縮短它以便更好地瀏覽。可能還不夠清楚,爲此我編輯了上面的代碼以避免未來的誤解。 – lucasdidthis