- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:jqueryでのkeydownイベント発生回数制御)
jqueryでのkeydownイベント発生回数制御
このQ&Aのポイント
- jqueryを使用して、キーを押しっぱなしにすると発生するkeydownイベントの回数を制御する方法を教えてください。
- キーを押しっぱなしにするとイベントが蓄積されて、動き続ける現象が発生しています。この現象を解消する方法を教えてください。
- safariでの環境でキーを押しっぱなしにしても、イベントが蓄積されずに正常に動作するようにする方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
手っ取り早くやるならstopですかね。 $(window).keyup(function() { $("#map").stop(true); }); 引数にtrueを渡せば、実行待ちしているアニメーション処理も削除してくれます。 キーを押し続けるとanimateメソッドが無駄に呼ばれ続け 無駄にキュー登録されますから、止めることを考えるより 無駄に呼び出さない方向で考えないとダメだと思いますけど。
その他の回答 (1)
- think49
- ベストアンサー率59% (285/482)
回答No.1
おそらく、animate() は非同期処理なのでしょう。 http://api.jquery.com/animate/ アニメーション中は keydown しても animate() しないように #map をビジー状態にする必要があります。 animate() 処理に移る前に <div id="map" aria-busy="true"></div> のようにして、aria-busy="true" 中は animate() しないようにしてみてください。 http://www.hitachi.co.jp/universaldesign/wai-aria/wd_20090224/#aria-busy
お礼
ありがとうございます。 確かにstopも使えそうなんですが、キュー登録自体は増えてしまうのが難点で.... 質問後も色々自分で試してみましたが、 function mainKeyIvent_parts(){ $(window).unbind("keydown",mainKeyIvent); setTimeout(function(){$(window).bind("keydown",mainKeyIvent);},250); } という関数を組んで、キー入力があると、250ミリ秒間(これはアニメの速度によって手動調整)キー入力ができないようにしてみたら一応意図通りに動くようになりました。 ただ、stopの時の様にまだ何か落とし穴があるかもしれませんね、 難しい(泣)