如何为jQuery keypress函数添加延迟/超时

时间:2012-03-29 15:44:08

标签: jquery timeout keypress

这是我现在用来移动多层旋转木马的代码(左上向上),但是我需要添加一个5000的超时功能,这样动画就有时间在触发下一次点击之前完成。

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);
     }

更新

我最终找到了解决方案。我知道可能有一个更清洁的方法来做到这一点,但我不知道如何原谅我的混乱。

// 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();
          }


        });
   }

2 个答案:

答案 0 :(得分:1)

尝试使用jquery库中的delay函数,这里是教程url http://api.jquery.com/delay/

它可能是这样的。

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

答案 1 :(得分:0)

这应该可以解决问题:

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