2012-03-29 8 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

これは、ユーザーを困らせるために起こっている...彼らは、キーを押して、文句を言わないと予想結果を得る - なぜ完了するには、[停止()](http://api.jquery.com/stop/)を使用しませんアニメーションと次の開始? – ManseUK

+0

私は3つの写真を先に飛ばしようとしていて、次のキーを押す前に各ターンを待たなければならなかったので、私は真剣に私を悩ますだろうから、 "ロック"よりも遅れていくだろう。 – Anthony

+0

問題は、現在のスライドの位置を追跡するために、.active(ul.active)と.active-li(ul.active li.active-li)を移動していることです。ユーザーが矢印をあまりに速くたたくと、それが先に進んでしまうこともあります。 –

答えて

0

これはトリックを行う必要があります。

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

これを置き換えるべきか - $( "#right")。trigger( "click"); –

+1

その他のコンテキスト。これはどこに行くの?それはどのような出来事ですか? –

1

はjQueryライブラリから遅延機能を使用してみてください、ここでのチュートリアルのURLは、それはおそらくこのようなものになるだろうhttp://api.jquery.com/delay/

です。

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

これを置き換えるべきか - $( "#down")。trigger( "click"); –

+0

はい、あなたはtrigerの前に遅延を追加します –

関連する問題