如何为jQuery按键功能添加延迟/超时



这是我现在用来移动多层旋转木马的代码(从左到右上下),但我需要添加一个超时功能,比如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();
          }

        });
   }

尝试使用jquery库中的延迟函数这里是教程urlhttp://api.jquery.com/delay/

可能是这样的。

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

这应该可以做到:

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

最新更新