2012-03-29 73 views
1

這是我現在用來移動一個多層輪播(左上向下)的代碼,但我需要添加一個超時函數說5000,所以在觸發下一次點擊之前,動畫有時間完成。如何添加一個延遲/超時到jQuery按鍵功能

function checkKey(e){ 

     switch (e.keyCode) { 
      case 40: 
       //alert("down"); 
       $("#down").trigger("click"); 
       break; 
      case 38: 
       //alert("up"); 
       $("#up").trigger("click"); 
       break; 
      case 37: 
       //alert("left"); 
       $("#left").trigger("click"); 
       break; 
      case 39: 
       //alert("right"); 
       $("#right").trigger("click"); 
       break; 
       }  
     } 

    // Call checkKey on key press 
    if ($.browser.mozilla) { 
     $(document).keypress(checkKey); 
    } else { 
     $(document).keydown(checkKey); 
    } 

UPDATE:

我最終找到一個解決方案。我知道這樣做可能有更簡潔的方法,但我不知道如何原諒我的混亂。

// Set Time variable 
    var checkTime = 0; 

    // Call checkKey on key press 
    if ($.browser.mozilla) { 
     $(document.documentElement).keypress(function (event) { 

      // set variable to current time 
      var currentTime = new Date() 
      // See if Now's current time is 400 past the old current time 
      if((currentTime.getTime() - checkTime) > 400){ 

       // If so then fire the triggers. 
       // Using if seemed to limit the inputs to a single keystroke   
       if (event.keyCode == 40) { 
         $("#down").trigger("click"); 
       } else if (event.keyCode == 38) { 
         $("#up").trigger("click"); 
       } else if (event.keyCode == 37) { 
         $("#left").trigger("click"); 
       } else if (event.keyCode == 39) { 
         $("#right").trigger("click"); 
       } 
       // Reset current time. 
       checkTime =currentTime.getTime(); 
      } 


     }); 
    } else { 
     $(document.documentElement).keydown(function (event) { 

      // set variable to current time 
      var currentTime = new Date() 
      // See if Now's current time is 400 past the old current time 
      if((currentTime.getTime() - checkTime) > 400){ 

       // If so then fire the triggers. 
       // Using if seemed to limit the inputs to a single keystroke   
       if (event.keyCode == 40) { 
         $("#down").trigger("click"); 
       } else if (event.keyCode == 38) { 
         $("#up").trigger("click"); 
       } else if (event.keyCode == 37) { 
         $("#left").trigger("click"); 
       } else if (event.keyCode == 39) { 
         $("#right").trigger("click"); 
       } 
       // Reset current time. 
       checkTime =currentTime.getTime(); 
      } 


     }); 
    } 
+0

這會激怒用戶...他們按一個鍵,不會得到預期的結果 - 爲什麼不使用[Stop()](http://api.jquery.com/stop/)完成動畫並開始下一個? – ManseUK 2012-03-29 15:47:53

+0

我會比延遲更多的延遲,因爲它會更容易實現,因爲如果我試圖向前跳3張圖片並且在下一次按鍵之前必須等待每一轉,它會嚴重地使我煩惱。 – Anthony 2012-03-29 15:48:06

+0

我想問題是我正在移動.active(ul.active)和.active-li(ul.active li.active-li)來跟蹤當前幻燈片的位置。而且這是一個組合,在這些關閉周圍以及在某些時刻,如果用戶點擊箭頭的速度過快,它會超越自己。 – 2012-03-29 15:57:16

回答

0

這應該做的伎倆:

setTimeout(function() { 
    $("#right").trigger("click"); 
}, 5000); 
+0

應該替換這個 - $(「#right」)。trigger(「click」); – 2012-03-29 16:02:11

+1

更多上下文。這個去哪了?什麼事情是必然的? – 2012-11-13 03:12:15

1

嘗試使用延時功能,從這裏jQuery庫是教程網址http://api.jquery.com/delay/

它可能會是這樣的。

$("#down").delay(5000).trigger("click"); 
+0

應該替換這個 - $(「#down」)。trigger(「click」); – 2012-03-29 16:07:22

+0

是的,你應該在triger之前添加延遲 – 2012-03-29 16:08:13