十字キーとABボタンの押下を取得
3DSブラウザのJavaScriptでキー入力を取得するには、keydownイベントとkeyupイベントを使用します。キーコードは十字キーの左上右下が37~40、Aボタンが13となります。
ただし、現状ではキーが押された時のデフォルトの動作をキャンセルする方法がわかりません。よって、利用するには以下のような画面構成の制限が発生します。
- 十字キーでフォーカス移動してしまうリンクやボタン類を配置しない
- 左右キーを使用する場合は横幅を320pxに収める
- 上下キーを使用する場合は縦幅を212pxに収める
- 下キーを使用し上キーを使用しない場合は縦幅を424pxまたは432pxとし、ページ表示時に縦幅-212pxをスクロールさせておく
Bボタンはフォーカスキャンセルに使用されれているため、キーイベントでは取得できないようです。
逆手にとってダミーのBUTTONタグに常時フォーカスを当てておき、フォーカスが外れたらBボタンが押されたとみなす方法があります。
この方法ではBボタンが離されたタイミングは取得できません。
この方法を使用していると、AまたはBボタンが押されたときに効果音が発声されます。
2011/10/24
画面をタッチするとダミーボタンからフォーカスが外れ、Bボタンが押されたと誤認識する問題を修正しました。
タッチすると3DSに限りdown→blur→click→timerの順にイベントが発生するため、clickの段階で「これはBボタンによるキャンセルではない」と認識しなおすことができます。
ただし、同一箇所長押しによりテキスト選択イベントが開始されたときは、PCと同様にdown→blur→timer→clickとイベントが発生し誤認識します。
2011/10/27
ダミーボタンの上下左右にさらにダミーボタンを配置し、常時中央のダミーボタンにフォーカスを当てておけば、十字キーでのスクロールを完全に抑制できることを確認しました。
ただし、ボタンを押している間フォーカス移動の効果音が鳴り続けます。
ボタンタイプはプッシュボタンではなくラジオボタンにし、上から別のエレメントで隠してしまうとあまり目立たなくなります。
実行画面へ戻る トップへ戻る