- ベストアンサー
マウスオーバーでの表示切り替えを待機させる方法
- ウェブサイトでボタンにマウスオーバーした際、すぐに表示が切り替わらずに一定時間待機させる処理を実装したい。
- アクションスクリプトやムービークリップを使用して、マウスオーバー処理中に一定時間待機する方法を模索している。
- ボタンインスタンスのマウスオーバー処理中にfor文を使って待機処理を試したが、マウスが離れても処理がキャンセルされないため断念した。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
3つくらい方法を思いつきました。 3つ目はあまり参考になりませんが。 ------方法1------ setIntervalでアクションまでの時間を待つ。 on (rollOver) { ID1 = setInterval(function () { gotoAndPlay(5); clearInterval(ID1); }, 3000); } on (rollOut, dragOut) { clearInterval(ID1); } 勝手にgotoAndPlay(5)にしてますが,ここを他のアクションに変えてください。 3000);は3000ミリ秒(3秒)です。ここも変えてください。 構造は下のようになっています。 ID = setInterval(function () { ステートメント; }, 実行間隔); ------方法2------ onEnterFrameでタイマーを起動 タイマーをセットして,「タイマーが○秒経過したら,何かをする。」という方法です。 on (rollOver) { Time1 = getTimer(); this.onEnterFrame = function() { Time2 = getTimer(); if (Time2>=Time1+3000) { gotoAndPlay(5); } }; } on (rollOut, dragOut) { this.onEnterFrame = null; } on (rollOver) Time1にムービーが始まってからロールオーバーしたときまでの経過時間をセット。 onEnterFrameで1フレーム進む時間に1回 Time2に経過時間をセットしなおし, もしTime2がTime1より3000ミリ秒(3秒)大きくなったら, 5フレームに行く。 on (rollOut, dragOut) EnterFrameを解除 というものです。 3000の部分と,gotoAndPlay(5)の部分は変えてください。 ------方法3------ >> アイデアだけでもいいので 以下は,その他のアイデアだけです。onEnterFrameなんてなかった昔話だと思ってください。 まず「Timer1」というムービークリップを作ります。 そのムービークリップの1フレーム目に stop(); を書いて止めておきます。 3秒待ちたい場合は36フレームにして,36フレーム目に, _root.gotoAndPlay(5); のようなスクリプトを書きます。 この「Timer1」というムービークリップを制御するボタンを作り, on (rollOver) { _root.Timer1.Play(); } on (rollOut, dragOut) { _root.Timer1.gotoAndStop(1); } と書きます。 これで,点線より上のスクリプトと同様のことができます。 できるかできないかだけを考えると,goto(),Stop,Playで結構なことはできると思います。 あとgetURLでも加われば,SWF外にも飛び出せます。 考えるのも簡単ですしね。 今となれば,ヤボったくて,回りくどくて変ですけど。
お礼
どうもありがとうございます! こんなに丁寧にスプリクトの例まで書いて頂いて、本当に助かりました。これからも勉強に励みます! 例示して頂いた3パターン全てについて試しましたが、願った通りの処理を実現する事が出来、満足しています。ありがとうございました! どの方法についても、とてもわかりやすい解説でした。^^ 実際の使用には、色々考えた末、方法1を選択しました。再生環境がフラッシュプレイヤー4以下でなければならない理由もありませんでしたので。 setInterval、リファレンスガイドをしらみつぶしに見たはずだったんですが、この関数が使えるのには気づきませんでした、、、 ともかく、本当にありがとうございました。