2013-01-07 58 views
0

我試圖完成的是有一個菜單,當點擊一個「按鈕」時會顯示出來(按鈕和菜單位於不同的元素中,因此鼠標不會徘徊在最初的菜單)。當沒有超時超時時,菜單應該隱藏

如果菜單在超時期限內沒有被覆蓋(當前是這樣做的,但僅在第一次點擊時),它應該隱藏自己。另外,如果元素被覆蓋,我想隱藏鼠標並清除計時器並再次單擊按鈕將重置超時(它不會重置也許?)。

我已經嘗試了幾個化身,沒有任何我已經嘗試了行爲正確,我正在尋找建議。這是他的什麼我目前正在使用:

var mytimer = window.setTimeout(function() {$('.menu-div').slideUp(function() { 
     window.clearTimeout(this.mytimer); 
}) 
}, 5000); 

$().ready(function(){ 

    $('#menu-button').click(function() { 
     $('.menu-div').slideDown(); 
     $(mytimer); 
    }); 

    $('.menu-div').mouseenter(function() { 
     window.clearTimeout(this.mytimer); 
    }); 

    $('.menu-div').mouseout(function() { 
     $('.menu-div').slideUp(200); 
    }); 
}); 
+0

「garagetimer」在哪裏使用?你的代碼只用它來清除超時... –

+0

假設你想重新激活定時器,但是根本不清楚預期的行爲。 garagetimer沒有在任何地方定義爲'setTimout'。目前'myTimer'只在頁面加載時被激活。不起作用的代碼從來不是一個很好的替代品,它解釋了它應該做什麼 – charlietfl

+0

對不起,garagetimer不應該在那裏。那是一個錯字。 – Justin

回答

0

我想你想是這樣的(只是猜測,因爲你沒有給任何HTML)

$(function(){ 
    var mytimer=0; 
    $('#menu-button').click(function() { 
     $('.menu-div').slideDown(); 
     mytimer = setTimeout(function(){ 
      $('.menu-div').slideUp(); 
     }, 5000); 
    }); 

    $('.menu-div').mouseenter(function() { 
     clearTimeout(mytimer); 
    }); 

    $('.menu-div').mouseleave(function() { 
     $('.menu-div').slideUp(); 
    }); 
}); 

DEMO

+0

這幾乎就是我之後的事情。在之前的評論之後,我能夠弄明白。我的問題是,爲什麼將計時器設置爲0?不只是將其聲明爲var mytimer;工作?或者這是一個壞主意? – Justin

+0

@Justin,只要聲明就可以了。 –