
main.html*************************************
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
<meta http-equiv="Content-Style-Type" content="text/css">
<link href="css/ffUI.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="script/jquery.js"></script>
<script type="text/javascript" src="script/ffmain.js"></script>
</head>
<body>
<div id="main">
</div>
</body>
</html>
ffUI.css***************************************
* {margin:0;padding:0;}
#main {width:320px;height:240px;overflow:hidden;}
#map {margin-top:0px;margin-left:0px;}
ffmain.js**************************************
mainFunction();
function mainFunction(){
$("#main").append('<div id="map"><image src="image/maptest.gif"></div>');
$(window).bind("keydown",mainKeyIvent);
}
function mainKeyIvent(e){
switch(e.keyCode){
case(38):
$("#map").animate({marginTop:"+=16px"});
break;
case(40):
$("#map").animate({marginTop:"-=16px"});
break;
case(37):
$("#map").animate({marginLeft:"+=16px"});
break;
case(39):
$("#map").animate({marginLeft:"-=16px"});
break;
}
}
というコードを書いて、RPGのMAPのように、
出した画像が上下左右のキーで16ピクセルずつ動くコードを書いてみたんですが、
一応動きはしますが、キーを押しっぱなしにすると、
その間にキーイベントが蓄積されて、右を押していたら、
キーを離してもずーっと右に動きっぱなしなってしまったりします。
押している間は動き続けてもいいですが、離した瞬間にちゃんと止まるようにしたいんですけど、
どのようにコーディングすればよいでしょうか?
環境はsafariです。
宜しくお願いしますm(__)m
No.2ベストアンサー
- 回答日時:
手っ取り早くやるならstopですかね。
$(window).keyup(function() { $("#map").stop(true); });
引数にtrueを渡せば、実行待ちしているアニメーション処理も削除してくれます。
キーを押し続けるとanimateメソッドが無駄に呼ばれ続け
無駄にキュー登録されますから、止めることを考えるより
無駄に呼び出さない方向で考えないとダメだと思いますけど。
ありがとうございます。
確かにstopも使えそうなんですが、キュー登録自体は増えてしまうのが難点で....
質問後も色々自分で試してみましたが、
function mainKeyIvent_parts(){
$(window).unbind("keydown",mainKeyIvent);
setTimeout(function(){$(window).bind("keydown",mainKeyIvent);},250);
}
という関数を組んで、キー入力があると、250ミリ秒間(これはアニメの速度によって手動調整)キー入力ができないようにしてみたら一応意図通りに動くようになりました。
ただ、stopの時の様にまだ何か落とし穴があるかもしれませんね、
難しい(泣)
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-ari …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS html/cssで要素が出てこなくて困ってます 1 2022/12/31 16:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
サイトにアクセスした際、数秒...
-
jQuery LightBox Plugin動かず
-
jqueryのcolorboxを読込直後に...
-
同HTML内で2種のJ-Queryを使用...
-
jquery ui.resizable 使い方
-
ebayの返信で『 Message may no...
-
jQuery Cycle Pluginについて
-
fc2blogで
-
jQueryと他のライブラリを同時...
-
同HTML内で複数のjQueryを設置...
-
<a href="#" …>の意味を教えて...
-
html メールリンクにて自動ファ...
-
特定のウィンドウ名を持つウィ...
-
<FORM>タグのtargetに値を書込...
-
ページを表示すると同時に複数...
-
別ファイルのfunctionの読み込み方
-
ホームディレクトリを示すチル...
-
セキュリティ保護の警告が出な...
-
月ごとに表示するページを変える
-
スマホ上で、左右スワイプで次...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
サイトにアクセスした際、数秒...
-
<div>のタッチ状態を維持したま...
-
base64encodeでの文字化けについて
-
jquery ui.resizable 使い方
-
jQuery UIのdraggableについて
-
jqueryについて質問させてくだ...
-
重複する数字のカウントの仕方
-
Camera slideshowの使い方について
-
Lightboxがエラーになります。
-
jqueryについて(Lightboxとbxs...
-
よろしくお願いします。
-
JW Playerの"file"にURLに付け...
-
jQuery.lightpop.jsの動作について
-
crossSlideがうまく機能しない...
-
map とlightbox
-
Jqueryの干渉について
-
マスターページでのJavaScriopt...
-
マウスオーバーでリンク先サム...
-
SVGのmask要素について
-
jqueryのcolorboxを読込直後に...
おすすめ情報