人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javascript について質問です



1.Google Map を表示します
http://maps.google.co.jp/

2.URL 欄に次のように打ちこみます
javascript: (function(){setTimeout(function(){alert('timeout')}, 5000)})()

3.次の操作を行います
キーボードで地図移動⇒アラートが出る⇒キーを離す⇒アラートを消す⇒地図はとまる

このとき、Google Map は KeyDown や KeyUp でしかキーの状態が取得できないと思うのですが
どうして移動をとめることができるのでしょうか

alert を補足するイベントがあるのでしょうか
それとも、キーの状態をタイマーでチェックしているのでしょうか
(キーイベント以外で状態を補足できるのでしょうか?)

教えてください

●質問者: you_got
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Google JavaScript MAP URL はと
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● nagase
●60ポイント

javascriptはマルチスレッドではないので、alertのモーダルダイアログで(モーダルではない処理系もあるが) 他の処理が止まるのは当然だと思うのですが。

おそらく、キーを押し続けて地図がスクロール処理としては

0) キーのUp Down を捕らえて、キーの状態を保存するだけのハンドラある
1) 矢印キーの押下を検知してスクロール処理を開始
2) 地図をスクロールしてsetTimeoutでリピートする
3) 2のタイムアウトハンドラでキーの状態をチェックし、押されていれば 2へ、キーが押されていなければスクロール停止

こんな感じの処理だと思います。

そこでスクロール途中にモーダルダイアログが表示されるため、ダイアログ表示中は 2 と 3 の処理が止まるのだと思います。

そして処理が止まっているうちにキーが離されるため、スクロールの処理が継続しないんじゃないかと思います。

ソースを読めば分ると思いますが、難読化されているので読もうという気になれませんね。

◎質問者からの返答

質問の補足をありがとうございます。

私もそこまでは想像していました。

>3) 2のタイムアウトハンドラでキーの状態をチェックし、押されていれば 2へ、キーが押されていなければスクロール停止

ここで、キーの状態をチェックする方法はありますでしょうか?

KeyUp, KeyDown ではそのイベントを起こしたキーが何か、という情報はくるのですが

「今何が押されている」という情報は取得できません

→ を押したときは →

→ をそのままにして ↓ を押したときは ↓ だけきます

ご存知でしたらその部分を詳しく教えていただけるとたすかります

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ