ポップアップを一定時間、またはマウスが乗っている間表示させておく

このQ&Aのポイント
  • ポップアップを一定時間、またはマウスが乗っている間表示する方法を教えてください。
  • エリアにマウスをのせるとポップアップウィンドウが表示され、ボタンをクリックして外部swfを読み込む仕組みを作りたいです。
  • エリアから外れても一定時間ポップアップを表示されたままにしたい方法と、ポップアップにマウスがのっている間は表示させておく方法を教えてください。
回答を見る
  • ベストアンサー

ポップアップを一定時間、またはマウスが乗っている間表示させておく

スクリプトに詳しくないので、教えていただきたいです。 画面上のあるエリアにマウスをのせるとポップアップウィンドウのようなものが表示され、 その中にあるボタンをクリックすると外部swfを読み込むという仕組みを 作りたいと思っています。 下に書いてあるスクリプトでポップアップが出てくるようにしたのですが、 その次がわからなくて困っています。 (1)マウスがエリアから外れても、一定時間(例えば1秒とか)ポップアップを 表示したままにしたい (2)ポップアップにマウスがのっている間は表示させておきたい (1)はエリア部分とポップアップが離れている場合(といってもほんの少しです)を 考えてのことです。 いい方法がありましたらぜひ教えてください。 どうぞよろしくお願いいたします。 エリア部分に書いたActionScript --------------------------------------------------------------- onClipEvent (load) { _root.popup._visible = false; } onClipEvent (enterFrame) { if (this.hitTest(_root._xmouse,_root._ymouse,1)) { _root.popup._visible = true; } else { _root.popup._visible = false; } } ---------------------------------------------------------------

  • Flash
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1 です。 > どうしても質問に書いたスクリプトでやりたいということでは > 全くありませんので、他にもっといい方法がありましたら > ぜひ教えていただけると助かります。 いえ,これと言って良い方法というのは具体的にはないのです。 またムービーの構造(階層構造や位置関係など)がわからないので, よく考えると, 他のバージョンでもどれが良いかはわからないということに #1 を書いた後に気づきました。 ただ, ご質問のスクリプトや#1で書いたスクリプトでは, 1フレーム進む時間ごとに毎回ずっとマウスの位置を調べていて その結果 1フレーム進む時間ごとに毎回ずっと popup を表示または非表示させるという命令を出し続けるていることにすごく抵抗を感じるのです。 つまり 「すっと無駄な命令をし続けてCPUの無駄づかいだなぁ」 と思うのです。 Flash MX(Flash Player 6)以降では, ムービークリップにも on(rollOver) や onRollOver などが使えます。 また, Flash MX(Flash Player 6)以降では, setInterval が使えますから,これで ○秒おきに何かをさせることができます。 また, Flash 8 ※注↓ (Flash Player 8)以降では, setTimeout が使えますから,これで ○秒後に何かをさせることができます。 ※注  一応 setTimeout が使えるのは  無難に Flash 8 であると書きましたが  おそらく Flash MX でも使えると思います。  ただし プレビューしたり閲覧するFlashPlayerのバージョンは  Flash Player 8 以降である必要があります。 そんなこんなで, 絶対にこれが良いと言うわけではありませんが,  Flash 8 だと次のようにするのが普通かな? という例を書きます。 まずスクリプトを書いたエリアのムービークリップのスクリプトを全部消して, そのエリアのムービークリップにインスタンス名を付けます。 たとえば 「area_mc」 というインスタンス名を付けることにしておきます。 そして, ムービークリップ「popup」や「area_mc」が存在するフレームに, たとえば _root のフレーム1に次のようなスクリプトを書きます。 ------------------------------------- // 「popup」を非表示にする _root.popup._visible = false; // 「area_mc」にロールオーバーしたときの動作を定義 _root.area_mc.onRollOver = function() { // 「popup」を表示する _root.popup._visible = true; // セットした setTimeout を削除 clearTimeout(myID); }; // 「area_mc」からマウスをはずしたときの動作を定義 _root.area_mc.onRollOut = _root.area_mc.onDragOut=function () { // setTimeoutをセット myID = setTimeout(function () { // 「popup」を非表示にする _root.popup._visible = false; // 1000ミリ秒(1秒)遅延して実行 }, 1000); }; ------------------------------------- 必ずしもこれが良いとは限りません。 状況によっては使えないかもしれませんが, 「Flash 8 で普通に考えるなら,まずこんな感じにするかなあ。」 という例です。 ちなみに Flash 8 とは言っても ActionScript のバージョンは ActionScript1.0 のままです。 また,ボタン機能が重なるなど, 何かの理由で hitTest を使わなければならない場合で, なるべく無駄な命令をなくそうと思えば次のようになるかもしれません。 ------------------------------------- // 「popup」を非表示にする _root.popup._visible = false; // 「area_mc」 に対するロールオーバーのフラグを用意 area_flg = false; // マウスを監視するためのインスタンス「mouse_obj」を作成 mouse_obj = new Object(); // マウスが動いたときの動作を定義 mouse_obj.onMouseMove = function() { // もし 「area_mc」 がマウスとヒットして area_flg が false であれば if (_root.area_mc.hitTest(_root._xmouse, _root._ymouse, 1)) { // area_flg が false であれば if (!area_flg) { // セットした setTimeout を削除 clearTimeout(myID); // area_flg を true にする area_flg = true; // 「popup」 を表示する _root.popup._visible = true; } } else if (area_flg) { // setTimeoutをセット myID = setTimeout(function () { // 「popup」を非表示にする _root.popup._visible = false; // 1000ミリ秒(1秒)遅延して実行 }, 1000); // area_flg を false にする area_flg = false; } }; // 「mouse_obj」をMouseクラスのリスナーとして登録 Mouse.addListener(mouse_obj); ------------------------------------- やたらややこしくなってしまいましたね...。 ================== あと思ったのが, 作成しようとされているものは, ボタンをクリックすると外部swfを読み込むという仕組みの 「ポップアップウィンドウ」 のようなものですよね? そういったものは,黄色い 「ポップヒント」 とは違って, 「OK」や「キャンセル」や「×」ボタンなどがクリックされるまで普通出っぱなしになっていませんでしょうか? そういったものは,ふつう出っぱなしになっていると思うので, そもそもエリアから離れたときに消す必要があるのだろうか? とも思います。 これも場合や好みなどによるので何とも言えませんが。

ruby1024
質問者

お礼

いろいろ質問させていただきましたが、 教えていただいたスクリプトに付け足す感じで解決しました。 どうもありがとうございました!!

ruby1024
質問者

補足

ご回答ありがとうございます! 作ろうとしているものはまさに貼っていただいた画像のようなものです。 もう少し詳しくいうと、例えばarea_mcの部分がコーヒーカップの写真で、 そこにマウスがのると「コーヒーカップ」という名前と「詳しくはこちら」 というボタンのある吹き出しが出るようなイメージです。 「詳しくは…」をクリックすると詳細が表示されるというもので、 そこは外部swfを読み込むかたちにするつもりです。 画面の中にはコーヒーカップの他にもお皿やスプーンなどアイテムがあって、 マウスがのるとそれぞれ吹き出しが出るようにしたいのです。 なので、これはポップヒントに近いものだったかも知れません。 そこでもう1つ質問なのですが、教えていただいたスクリプトでは マウスがarea_mcから離れると1秒後にpopupは消えますよね。 この機能はそのままに、開いたpopupにマウスが乗っている間は そのpopupを表示しておき、マウスが離れたら消すということは できるでしょうか? 重ね重ねの質問で恐縮ですが、 お時間があれば教えていただけると幸いです。 どうぞよろしくお願いいたします。

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

Flash のバージョン もしくは パブリッシュしたい SWF の Flash Player のバージョンを書かれていらっしゃいませんから 少々回答しにくいです。 スクリプトを見る限り, Flash 5 で無理をして,作成している感じに見えます。 (Flash 5 はバージョンが古く,できないことが多いので,変な工夫や無駄な動作が要る。) その Flash 5 路線を変えない場合で 簡単にするには次のようにすれば一応できると思います。 onClipEvent (load) { _root.popup._visible = false; } onClipEvent (enterFrame) { if (this.hitTest(_root._xmouse, _root._ymouse, 1)) { _root.popup._visible = true; // ↓変数 counter(カウンター) を 0 にする counter = 0; } else { // ↓変数 counter に 1 を加算 counter++; // ↓もし counter が 20 以上になれば if (counter>=20) { _root.popup._visible = false; } } }  

ruby1024
質問者

補足

ご回答ありがとうございます。 早速やってみようと思いますが、取り急ぎFlashのバージョンについて 記載させていただこうと思います。 制作にはFlash8を使っていて、swfのパブリッシュ設定では Flash Player 8にしています。 また、どうしても質問に書いたスクリプトでやりたいということでは 全くありませんので、他にもっといい方法がありましたら ぜひ教えていただけると助かります。 どうぞよろしくお願いいたします。

関連するQ&A

  • マウスを追いかける

    ムービークリップがマウスを追いかけるというようにしたいのですが、追いかけるムービークリップが別のシンボルの中にあると座標がずれるようで、このずれをなくしたいのですがどのようにすればよいのでしょうか? 詳しくは、シーン1にシンボル(ただの図形と追いかけてほしいムービー:mc1)を置いて、mc1に下記のスクリプトを書きました。 -------------------------------------------- onClipEvent (load) { _root.mc1.startDrag(true); x = _root._xmouse; y = _root._ymouse; } onClipEvent (enterFrame) { _x += (_root._xmouse-_x)/4; _y += (_root._ymouse-_y)/4; } --------------------------------------------

    • ベストアンサー
    • Flash
  • 揺れるスクリプトについて

    こちらで教えていただいたサイトで揺れるスクリプト を勉強していたのですが、 ■をMCにして、  onClipEvent (load) {    this._xscale = this._yscale = 0;    function sMove(mScale,acc,conv) {      theScale = theScale*acc+(mScale-this._yscale)*conv;      this._xscale = this._yscale += theScale;    }  }  onClipEvent (enterFrame) {    if (this.hitTest(_root._xmouse,_root._ymouse,1)) {      sMove(130,0.8,0.2);    } else {      sMove(100,0.8,0.2);    }  } と書いたのですがプレビューすると真っ白なままなにも 表示されません。 なぜなのでしょうか?

    • ベストアンサー
    • Flash
  • ムービークリップの領域をシェイプの形状にしたい

    よろしくお願い致します。 ムービークリップにマウスオーバーするとムービークリップが再生し、マウスアウトすると逆再生するというものを作っています。 ここで、ムービークリップのマウスオーバーする領域を矩形ではなく、見たままの形(シェイプの形状)だけに指定するにはどうすれば良いでしょうか? 現在の状況は、マウスオーバーさせるムービークリップに onClipEvent (load) { this.stop(); } onClipEvent (enterFrame) { if (this.hitTest(_root._xmouse, _root._ymouse, false)) { this.nextFrame(); } else { this.prevFrame(); } } のアクションを書いています。 自分なりに調べたところ、「shapeFlag?というものを使うらしい?」というのは分かったのですが、どう使えば良いのかさっぱり分かりません・・ どなたかご指導頂けないでしょうか。 どうぞよろしくお願い致します。

    • ベストアンサー
    • Flash
  • 外部swfを読み込んだときだけMouse.hide();させたい。

    よろしくお願いします。 ドキュメント上に空のムービークリップを作り、その中の入れ子のボタンを押すと外部swfを表示するflashを作ったのですが、その外部swf、仮にhoge.swfを読みこんで、そのときだけマウスを隠して(ムービークリップをマウス代わりに)、ボタンで違う外部swf、仮にogeをよみこんだときはマウスを表示させることは可能でしょうか? onClipEvent (enterFrame) { this._x=_root._xmouse; this._y=_root._ymouse; Mouse.hide(); } 上記のスクリプトでマウスを消すと、ogeを読み込んでもマウスが消えっぱなしです。 多分if文を使って if (hogeを読み込んだら){ this._x = _root._xmouse; this._y = _root._ymouse; Mouse.hide(); } //そうでなかったら、 else { Mouse.show(); } みたいな感じなのでしょうが、うまく機能しません・・・。 ご教授お願い致します。

    • ベストアンサー
    • Flash
  • hitTest(_root._xmouse, _root._ymouse, true)が有効になりません

    WinXP,Flash8pro,photoshopCS2,IllustratorCSで オーサリングしています。 フォトショとイラレでPNG画像を作成し、 Flash8Proに読み込んでステージに配置し、 MCに変換してから hitTestスクリプトで hitTest(_root._xmouse, _root._ymouse, true)としようとしていますが、 hitTest(_root._xmouse, _root._ymouse, false)で 処理されてしまいます。 FireWorksで作成したFireWorksPNG形式だと 正常にTrueで動作します。 フォトショやイラレのPNGでは透過部分を判別し、True判定できないのでしょうか? また、どのようにしたらフォトショやイラレのPNGを Trueで処理できるのでしょうか。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • Flash
  • マウス 追従 範囲外

    マウスを追いかけるMCを以下のように設定しましたが、 MCが動いている範囲外にマウスがいるときは追いかけるのを やめにしたい場合どのように記述すればよろしいでしょうか。  onClipEvent (mouseMove) { if (_root._xmouse >左 && _root._xmouse <右) { this._x = _root._xmouse; } if (_root._ymouse >上&& _root._ymouse <下) { this._y = _root._ymouse; } } 範囲外にマウスがいるときは定位置にmcを表示させるか、 表示を消したいです。 ちなみにmcが動く範囲の指定方法はネット上から探してきました。 別の方法でもっと適した記述があれば教えてください。

  • FLASH ロールオーバーでプルダウンメニュー

    FLASHを勉強中3週目です。 アイコンにマウス、(マウスオーバー)を置くと、ロールオーバーでプルダウンメニューが出るようにし、そのメニューからそれぞれのURLにリンクようなサイトを考えています。 下記のChapter11 メニュー・フォーム:11-01 ロールオーバーでプルダウンメニューを表示を参考にしています。 http://book.mycom.co.jp/support/e5/actionscript10/ 画像を作成しするところまでなんとか出来ましたが、スクリプトがわかりません。 上記のサイトでは onClipEvent (load) { this.Stop(); } onClipEvent (enterFrame) { hitTop = this.hitTest(_root._xmouse, _root._ymouse, true); if (hitTop) { this.gotoAndStop("on"); } else { this.gotoAndStop("off"); } } と書かれていますが、urlにリンクをするまでの説明がありません。 初心者用のFLASHのマニュアルを2冊ほど買って勉強していますが、上記のようなスクリプトが載っていないので、WEBで調べながら勉強をしています。 プルダウンメニューのスクリプトで、リンクまでを説明しているサイトがあれば、ご教授ください。 どうぞよろしくお願いします。

  • チェックボックスについて

    現在チェックボックスを使用した作品を作成しています。 チェックボックスの左隅(ボックスの左辺)に マウスが乗ってるか乗ってないか位の位置でクリックをすると イベント処理は行われるのですが、チェックが消えなかったり 逆にチェックが表示されないままになってしまいます。 何かいい対処法はあるのでしょうか? ご教授頂けたら幸いです。 開発環境:CS3 AS2.0 以下チェックボックスに記述しているスクリプトです。 onClipEvent(mouseUp){ if(this.hitTest(_root._xmouse, _root._ymouse, false)){ if(this.getState()){ //処理 } else{ //処理 } //処理 } } }

    • ベストアンサー
    • Flash
  • 移動範囲を指定したい

    マウスを追いかけるMC1の追いかける範囲を指定したいのですがうまくいきません; 細かい指定としては↓ (1)画面の下1/5ぐらいのMC2の中にはMC1は入れない (2)マウスがMC2の中にある時はMC1はy座標は変化なし x座標はマウスを追いかける(つまり、横にしか動かない) (3)マウスがMC2から出てきたら、再びMC1はマウスを追いかける 現状としては ------------------------------------------- onClipEvent (enterFrame) { if (this.hitTest(_root.ki.kusa)){ _x += (_parent._xmouse-_x)*0.1; this._y += 0; }else{ _x += (_parent._xmouse-_x)*0.1; _y += (_parent._ymouse-_y)*0.1; } } ------------------------------------------- これでは、マウスがMC2から出てきた時に、MC1がMC2から離れないという様になってしまうのですがどうすればいいでしょうか??

  • Flashで、ナビゲーションがマウスカーソルに追従し、カーソルに近づくと止まるボタン

    FlashのActionScriptについての質問です。 参考書を見ながらやっていて、 ナビゲーションがマウスカーソルに追従し、カーソルに近づくと止まるボタンを作りたいのですが、 マウスに追従してきません。 _rootタイムラインのムービークリップctr_mcsetに、 onClipEvent (enterFrame) { if (_root.woksctr == true) { this._x += (_parent._xmouse-this._x)/5; this._y += (_parent._ymouse-this._y)/5; } } を記述しました。 ctr_mcsetのタイムラインに、触れると追従が止まるボタンの領域として、 cl_bn02を配置して、クリッカブル表示されないように on (release) { } onClipEvent (load) { this.useHandCursor = false; } を記述しました。 その、cl_bn02のタイムラインに、_up,_over,_downラベルをつくり、 _upには、 stop(); this.hitArea = hit; this.hit._visible = false; _root.worksctr = true; _over,_downには、 _root.worksctr = false; と記述しました。 参考書の通りだと、これでマウスカーソルにナビゲーションが近づくと静止し、 離れると追従するらしいのですが、止まったまま追従してきません。 if (_root.woksctr == true)の、==を、=だけにすると、追従はしてきますが、 ムービークリップの中心点にマウスカーソルがいつもいってしまって、 左右のボタンがうまく押せません。 どこか記述がヘンなのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Flash

専門家に質問してみよう