2009-05-26 83 views
1

我試圖讓我的菜單欄部分隱藏大約5秒的不活動超時。菜單位於頁面頂部20px處,基本思想是,一旦菜單向上移動,菜單的一小部分仍然可見,以允許用戶將鼠標懸停在此上方,以便再次下降(希望這會使感!)。jquery延遲css div的位置

我管理了動畫方面,但不是超時。 有什麼建議嗎?

回答

2

不幸的jQuery沒有延遲功能。但是,你可以使用一個偷偷摸摸的,而不是太骯髒的黑客模擬延遲,通過動畫元素的不透明度,從1到1:

$('#visibleElement')    // Assuming the element is already shown 
    .animate({opacity: 1.0}, 3000); // do nothing for 3 seconds 

所以在鼠標離開後的5秒鐘內你的菜單向上滑動您可以執行以下操作:

$('#menuDiv').mouseout(function(){ 
    .animate({opacity: 1.0}, 5000) 
    .animate(slide up etc... 
}); 
+1

這是不是隱藏5秒後菜單不考慮閒置在mousover事件,如果有超時,使用殺呢?就我的問題而言,它更多的是關於從非活動開始設置超時的邏輯...... – peirix 2009-05-26 11:02:34

+0

公平點。將我的示例編輯爲mouseout而不是pageload。 – 2009-05-26 11:06:54

+0

不透明黑客似乎工作正常,它讓我在菜單動畫向上之前我想要的位置5秒,很好! – DanC 2009-05-26 11:26:15

2

您應該使用mouseout事件表示菜單div來實現這樣的功能:

var waitingForMenuToHide = false; 

function myOnMouseOut() { 
    waitingForMenuToHide = true; 
    setTimeout(function() { 
     if (waitingForMenuToHide) { 
      // Hide the menu div... 
     } 
    }, 5000); 
} 

mouseover事件重置waitingForMenuToHide變量:

function myMouseOver() { 
    waitingForMenuToHide = false; 
} 
1

在鼠標移出事件時,使用回調啓動超時以向上滾動元素。

clearTimeout(timer); 

因此,這將是這樣的:

var timer; 
$('mybar').mouseover(function(){clearTimeout(timer);/* Animate down code here */}); 
$('mybar').mouseout(function(){timer=setTimeout(function(){/* Animate up Code Here */}, 5000);});