• ベストアンサー
  • 困ってます

キーを離した際、、、

  • 質問No.5621522
  • 閲覧数88
  • ありがとう数2
  • 回答数3

お礼率 14% (1/7)

超初心者です。

ムービークリップタイプのA、B、C、D、4つのボタンを作成しました。
マウスを各ボタン上に乗せると、色が変わります。
選ばれたボタンを、クリックすると、イベントが発生します。

これをTABキーと連動したいです。
TABキーが離された瞬間、次のボタンへフォーカスが移動する形で、ボタンを選び、そして、決めたボタン上でEnterキーを押したら、イベントを発生させたいです。

例として、最初TABキーを押したら、フォーカスがAボタンへ行きます。
次に、TABキーを離したら、AからBボタンへ行きます。
また、TABキーを離したら、今度は、BボタンからCボタンへ行きます。
この過程中、TABキーをずっと押したまま離さないと、フォーカスが移動しません。
アクションスクリプトのバージョンは2.0です。
こういうのって可能ですか?
可能ならば、ぜひよろしくお願いいたします。

質問者が選んだベストアンサー

  • 回答No.3
  • ベストアンサー

ベストアンサー率 91% (1611/1754)

以下 #2 の方と内容が重複するかもしれませんが一応。


> 例として、最初TABキー

これ以降の「例」の説明がよくわかりませんが,
その「例」より上のご質問内容を見て,
一応 "形だけ" そのようなものは考えて作ってみました。


ムービークリップ(MC)製の A・B・C・D 4つのボタンにはそれぞれ
「A_mc」「B_mc」「C_mc」「D_mc」というインスタンス名を付けるとします。

それら 4つの MC が配置してあるタイムラインのフレームに書くスクリプト例です。

----------------------------------
// 配列mcArr にボタンMC名を登録しておく
var mcArr:Array = new Array("A_mc", "B_mc", "C_mc", "D_mc");

for (var i:Number = 0; i<mcArr.length; i++) {
// 各ボタンMCの自動Tab選択を無効にする
this[mcArr[i]].tabEnabled = false;
// 各ボタンMCに何某かのアクションを設定(仮)
this[mcArr[i]].onRelease = function():Void {
trace(this._name);
};
}
// カウント用変数 cnt に初期値を設定
var cnt:Number = 0;

// キー監視用オブジェクト keyObj を作成
var keyObj:Object = new Object();

// キーアップ時の動作を定義
keyObj.onKeyUp = function():Void {
// アップしたキーが Tab であれば
if (Key.getCode() == 9) {
// mcArr の cnt 要素のボタンにフォーカスを当てる
Selection.setFocus(mcArr[cnt]);
// cntが配列要素数-1未満だと cntに1を加算しそれ以外は0に戻す
cnt = (cnt<mcArr.length-1) ? cnt+1 : 0;
}
};

// keyObj を Keyクラスのリスナーに登録
Key.addListener(keyObj);
----------------------------------

※ Flash MX 2004 以上 ActionScript 2.0


これですが...,
「制御」→「ムービープレビュー」で出てくるプレビューパネルで,
「制御」→「キーボードショートカットを無効」にして動作確認するか,
もしくは,
パブリッシュしたSWFをダブルクリックして
スタンドアローンの Flash Player で見たときは
思惑通りに動くんです。

しかし!
SWFをHTMLに貼り付けてブラウザで見ると
HTML やブラウザなどにフォーカスが移り回るんです。

「Tab」キーには意味(既存割り当ての動作)があるので
Flash だけの問題で済まなくなると思います。
上に書いた「一応 "形だけ" そのようなものは考えて作ってみた。」という意味はそういうことです。


ブラウザなどに表示させる場合は「Tab」キーでない別のキーでフォーカス移動させる方が良いと思います。
お礼コメント
totorojp

お礼率 14% (1/7)

BlurFiltan様、
ご丁寧に書いていただいてありがとうございます。
ブラウザから見ると確かに、HTML やブラウザなどにフォーカスが移り回るますね、、他のキーでやるしかないですね、、
投稿日時:2010/01/28 17:15

その他の回答 (全2件)

  • 回答No.2
連投になりますが、多くのWebブラウザが、

tabキーでフォーム部品等をフォーカスし、
enterキーでクリックと同様の効果
を実装しています。

貴殿の書いた仕様ですと、

押す=Aをフォーカス(Webブラウザの機能)
離す=Bをフォーカス(このボタンの機能)
押す=Cをフォーカス(Webブラウザの機能)
離す=フォーカスを一度Bに戻してからCへ移動(このボタンの機能)

という奇怪な挙動となります。
基本設計を見直された方が良いでしょう。

また、一部のWebブラウザは、この挙動をカスタマイズ可能です。
これとの競合は、念頭に置かれてますか?
補足コメント
totorojp

お礼率 14% (1/7)

U-ta_m様

なるほど、これらは、まったく知りませんでした。

勉強になりました。

TABキーが離された瞬間ではなく、押された瞬間に、次にボタンへフォーカスが移動する仕様に変更します。

よろしくお願いします。
投稿日時:2010/01/25 13:40
  • 回答No.1
tabキーを押すとAがフォーカスされ、それを離すとBにフォーカスが
移る仕様だと、Aを選択する為にはDまでいって一回りする必要が生じますね。

そんな不便な仕様で本当に良いのですか?
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ