• ベストアンサー

サムネイル画像のマウスオーバーアニメーション

BlurFiltanの回答

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

#1です。 遅くなりました。 > 全てスクリプトで書きたいと考えております。 ということは, #1で書いた内容のイメージはほぼそのままで, そのすべてをスクリプトで作成するということになります。 ただ スクリプト で作成する場合は, 特にムービークリップ(MC) で構造を作成する必要はなく, スプライト(Sprite)で十分ということになります。 > 画像の読み込み方法 ということは,外部画像ファイルをロード&表示させるわけですね。  任意のフォルダ    ├○○.swf    └pic0.jpg このようなファイル構造になっていて, 「pic0.jpg」 は 120×90px の JPEG ファイルだとします。 その場合,#2の【下の図】↓ のような動きを落書きして考えてみます。 ※ステージ上に図のようなものを置くのではなくて,   単なる紙などへの落書きのつもりです。 そして,構造と動きがそうなるように ActionScript を考えます。 ○○.swf(○○.fla)のフレーム1の空白キーフレームに書く場合のスクリプト例です↓。 コピペ可能です。 ///////////////////////////////////////////////////////////////////////// // --- パッケージ付き クラス宣言 ------ // (必要であれば頭の // を取る) //import flash.geom.Rectangle; //import flash.display.*; //import flash.net.URLRequest; //import flash.events.MouseEvent; //import flash.events.Event; // ---初期設定--------- // 拡大縮小するスピードの設定 var spd_w:Number=4; var spd_h:Number=3; // 縮小時のマスクのサイズを設定 var msk_w_min:Number=80; var msk_h_min:Number=60; // 拡大時のマスクのサイズを設定 var msk_w_max:Number=120; var msk_h_max:Number=90; // 縮小時の背景のサイズを設定 var bck_w_min:Number=100; var bck_h_min:Number=80; // 拡大時の背景のサイズを設定 var bck_w_max:Number=140; var bck_h_max:Number=110; // ロードする画像ファイルを設定 var pic_dat0:String="pic0.jpg"; // my_sp0座標の設定 (例:ステージ中央) var sp0_x:Number=stage.stageWidth/2; var sp0_y:Number=stage.stageHeight/2; // ---構造作成--------- // スプライト my_sp0 を作成 var my_sp0:Sprite = new Sprite(); // 背景スプライト bck_sp0 を作成 var bck_sp0:Sprite = new Sprite(); // bck_sp0 に矩形を描画(仮色:赤) bck_sp0.graphics.beginFill(0xFF0000); bck_sp0.graphics.drawRect(-bck_w_min/2, -bck_h_min/2, bck_w_min, bck_h_min); // 画像表示用スプライト pic_sp0 を作成 var pic_sp0:Sprite = new Sprite(); // マスク用スプライト msk_sp0 を作成 var msk_sp0:Sprite = new Sprite(); // msk_sp0 に矩形を描画(仮色:青) msk_sp0.graphics.beginFill(0x0000FF); msk_sp0.graphics.drawRect(-msk_w_min/2, -msk_h_min/2, msk_w_min, msk_h_min); // pic_sp に msk_sp0 のマスクをかける pic_sp0.mask=msk_sp0; // 背景スプライト bck_sp0 を my_sp0 に配置 my_sp0.addChild(bck_sp0); // 画像表示用スプライト pic_sp0 を my_sp0 に配置 my_sp0.addChild(pic_sp0); // マスク用スプライト msk_sp0 を my_sp0 に配置 my_sp0.addChild(msk_sp0); // スプライト my_sp0 の座標を指定 my_sp0.x=sp0_x; my_sp0.y=sp0_y; // スプライト my_sp0 をステージに配置 addChild(my_sp0); // --- 外部画像のロード --------- // URLRequestインスタンス url0 を作成 URLRequest=pic_dat0 var url0:URLRequest=new URLRequest(pic_dat0); // Loaderインスタンス ld0 を作成 var ld0:Loader = new Loader(); // Loaderインスタンスの座標指定 ld0.x=- msk_w_max/2; ld0.y=- msk_h_max/2; // Loaderインスタンスを ld0 に指定画像をロード ld0.load(url0); // Loaderインスタンスをスプライト pic_sp0 内に配置 pic_sp0.addChild(ld0); // ---動きの定義と実行--------- // my_sp0 にイベントリスナーを登録(ロールオーバー時,実行関数onOver) my_sp0.addEventListener(MouseEvent.ROLL_OVER,onOver); // 関数 onOver の定義 function onOver(evt:MouseEvent):void { //my_sp0 のイベントリスナーを削除(毎フレーム実行,実行関数onFrame01) evt.target.removeEventListener(Event.ENTER_FRAME,onFrame01); //my_sp0 にイベントリスナーを登録(毎フレーム実行,実行関数onFrame00) evt.target.addEventListener(Event.ENTER_FRAME,onFrame00); } // 関数 onFrame00 の定義 var onFrame00 = function(evt:Event):void { // 設定スピードずつ拡大 bck_sp0.width+=spd_w; bck_sp0.height+=spd_h; msk_sp0.width+=spd_w; msk_sp0.height+=spd_h; // もし拡大時以上のサイズになれば if (bck_sp0.width >= bck_w_max && msk_sp0.width >= msk_w_max) { // 拡大時サイズで固定 bck_sp0.width=bck_w_max; bck_sp0.height=bck_h_max; msk_sp0.width=msk_w_max; msk_sp0.height=msk_h_max; // my_sp0 のイベントリスナーを削除 evt.target.removeEventListener(Event.ENTER_FRAME,onFrame00); } } // my_sp0 にイベントリスナーを登録(ロールアウト時,実行関数onOut) my_sp0.addEventListener(MouseEvent.ROLL_OUT,onOut); // 関数onOut の定義 function onOut(evt:MouseEvent):void { //my_sp0 のイベントリスナーを削除(毎フレーム実行,実行関数onFrame00) evt.target.removeEventListener(Event.ENTER_FRAME,onFrame00); //my_sp0 にイベントリスナーを登録(毎フレーム実行,実行関数onFrame01) evt.target.addEventListener(Event.ENTER_FRAME,onFrame01); } // 関数 onFrame01 の定義 var onFrame01 = function (evt:Event):void { // 設定スピードずつ縮小 bck_sp0.width-=spd_w; bck_sp0.height-=spd_h; msk_sp0.width-=spd_w; msk_sp0.height-=spd_h; // もし縮小時以下のサイズになれば if (bck_sp0.width <= bck_w_min && msk_sp0.width <= msk_w_min) { // 縮小時サイズで固定 bck_sp0.width=bck_w_min; bck_sp0.height=bck_h_min; msk_sp0.width=msk_w_min; msk_sp0.height=msk_h_min; // my_sp0 のイベントリスナーを削除 evt.target.removeEventListener(Event.ENTER_FRAME,onFrame01); } } ///////////////////////////////////////////////////////////////////////// 以上をコピペしてパブリッシュやムービープレビューすれば 一例のサンプルの出来上がりです。 階層構造は次のようになっています。  メインのタイムライン    └my_sp0(スプライト)      ├msk_sp0(マスク用スプライト)      ├pic_sp0(画像表示用スプライト)      └bck_sp0(背景用スプライト) ※「msk_sp0」「pic_sp0」「bck_sp0」はインスタンス名ではなく  インスタンスを参照するメインのタイムライン上の変数名です。 ※#1↓(?)↑(?) の【下の図】にイメージ的な図を追加しました。 上のように矩形入りスプライトの入れ子構造を空で考えてスクリプトで書いて作成するより, ムービークリップを手動で作成した方がずっと楽で色々し易いと思いますけどね。 上のスクリプトを書くこと自体も当然そうですし,ここから先を考える場合もそうです。 上のようなものでは実体が見えませんし, インスタンスを参照した変数名という遠隔操作みたいなイメージも要ります。 スクリプトで作成しない場合に手動で作成すると言っても, ムービークリップ3コ入りのムービークリップを1コ作って リンケージでムービークリップを継承するクラスに登録して, そのクラスをスクリプトでコピペ(addChild)すれば良いだけです。 (回答的には,操作手順などを一々説明しなくても良いので,スクリプトで回答する方が楽ですが。) ~~~~~~~~~~~~~~~~~~ まだまだ先の話ですが, 上で作成したもの群を, さらに1つのスプライトまたは1つのムービークリップの中に入れて 1つのインスタンスとして全体を動作させるようにするのが一般的です。  メインのタイムライン   └全体のインスタンス(スプライトまたはムービークリップ)      ├my_sp0(スプライト)      │ ├msk_sp0(マスク用スプライト)      │ ├pic_sp0(画像表示用スプライト)      │ └bck_sp0(背景用スプライト)      ├my_sp1(スプライト)      │ ├msk_sp1(マスク用スプライト)      │ ├pic_sp1(画像表示用スプライト)      │ └bck_sp1(背景用スプライト)      …    … さらに各「my_sp○」にロールオーバーしたとき, 全体のインスタンス の中で,各「my_sp○」の表示インデックス順(AS2.0以下で言う深度depth)を入れ替えるようなことも必要でしょう。 表示順の上下(見えないレイヤーみたいなもの)を入れ替えるわけです。 スクリプトはイメージ(構造・平面配置・上下配置・動き)を具体的に想像して そのイメージ通りの構造とデザインが実現するように組まなければならないため,なかなか難しいと思います。 スクリプトが難しいのではなくてイメージが難しいと思うという意味です。 おそらく先は長い長い… だと思います。

John12345
質問者

お礼

ご丁寧な回答誠にありがとう御座います! お陰様で全体の動き、マスク追加の方法も理解する事ができました。 参考サイトにあるような表示順序の入れ替え等は難しいかもしれませんが、実現できるよう頑張ります。

関連するQ&A

  • サムネイルをマウスオーバーすると画像を表示

    はじめまして。 サムネイル画像をマウスオーバーすると、特定の場所に画像が表示される方法を教えて頂きたいです。 以下がイメージに近いです。が、サムネイル画像は自分で別に用意したいです。 http://mizuame.sakura.ne.jp/jquery.tgImageChange/demo/index2.html これを実現させる為には、どのjqueryを利用すれば良いのでしょうか? 色々とググってみたのですが、ぴったりと希望のものが見つからなく…。 あまり知識も無いので、丁寧に説明されているものですと助かります…(すみません。) わかりやすい説明画像も添付しました。 ぜひ教えて頂きたいです。緊急で困っています。よろしくお願い致します!

    • 締切済み
    • CSS
  • サムネイル画像をマウスオーバーすると写真が切り替わる方法

    htmlでホームページを作っているのですが、大きな写真の横に小さなサムネイル画像(前面、背面など角度の違う写真)を載せて、サムネイルをマウスオーバーすると同一のページで大きな写真が切り替わる仕組みを作りたいのですが、やり方がわかりません。 比較的簡単な方法での作り方を教えてください。宜しくお願いします。

  • Flash マウスオーバー時などのアニメーションについて質問があります

    Flash マウスオーバー時などのアニメーションについて質問があります。 こんにちは。Flash初心者です。 使用しているソフトは「Adobe Flash CS4 Proffesional」です。 現在、ボタンを製作しております。 その過程でマウスオーバー時、マウスダウン時等に アニメーションを加えようと思っております。 実際にアニメーションは作成できたのですが、 アニメーションが無限にループしてしまいます。 一度きりのアニメーションにしたいのですが、うまくいきません。 どのような処理を行えばよいか教えていただけますでしょうか? よろしくお願いします。

  • マウスオーバーで他の2個の画像を入れ替えるには?

    javascript初心者です。何度試してみてもできないので、どなたか教えて下さい。 3つの画像が横に並んでいます。1番目の画像をマウスオーバーすると、2番目、3番目の画像が変わります。2番目の画像をマウスオーバーすると、1番目、3番目のい画像が変わります。3番目の画像をマウスオーオーバーすると、1番目、2番目の画像が変わります。こういった処理がしたいのですが、うまくできません。どなたかよろしくお願いします。 (イメージ的にはこんな感じです。これはflash ですが・・・⇒http://www.yamazakipan.co.jp/)

  • jQuery:マウスオーバーで画像が切り替わる

    下記のサイトのような事が実装できるjQueryプラグインを探しています。 http://www.sumitomo-rd-mansion.jp/shuto/shinjuku/private.html 実装したい事 ================================== 1)メイン画像の切り替えは 矢印をクリックするか サムネイルをマウスオーバーすると切り替わるようにしたい。 (スライドショーはなし) 2)メイン画像にはテキスト(説明文)も入れられる 3)メイン画像の下には、サムネイル画像も表示できる ================================== 参考になるサイト等、ご存知でしたら教えていただけば幸いです。

    • 締切済み
    • CSS
  • マウスオーバーして画像を入れ替えたい

    YahooのジオシティーズでHPを作成していますが、教えていただきたいことが2つあります。 1.javaスクリプトを使ってマウスオーバー、マウスアウトした時に写真を入替えたいと思っていますが、全くの初心者でどこにタグを入れていいのかわかりません。 どなたか下記URLのページの写真(1)にマウスオーバーした場合に写真(2)に変わり、マウスアウトすると写真(1)に戻るよう、下記URLのソースをすぐに使えるように手直ししていただけませんか?http://sky.geocities.jp/hokuto5131/test.html 2.Yahooのジオシティーズでマウスオーバーして画像を入替えるHPを見てみると、入替える画像のURLはimg.1のようになっていますが、私がYahooのジオシティーズに画像データを送ると上記のURLのソースのように『http://sky.geocities.jp/hokuto5131/~』になってしまいます。なぜでしょうか?またそのページに貼り付けていない画像データをどうやってYahooのジオシティーズのサーバーに送るのでしょうか? 以上よろしくお願いします。

  • マウスオーバーで大きい画像が切り替わる設定について

    同一ページで複数のサムネイルにマウスオーバーしたら 大きな画像が切り替わる設定をしたいのですが・・・ 下記サイト(同一ページで複数のスワップイメージ(ギャラリー)を見せたい)の 『フェードとかない普通のバージョン』を参考にしております。 下記サイトのスクリプトでは、サムネイルをクリックして画像の切り替えを 実行するのですが、サムネイルにマウスを置くだけ(クリックなし)に変更する ことは可能でしょうか? JQuery $(function () { $('div.swap li a').click(function (e) { e.preventDefault(); var imagePath = $(this).attr('href'); var mainImage = $(this).parents('div.swap').find('p img'); $(mainImage).attr('src', imagePath); }); }); 参考サイト http://depthcode.com/2010/10/swap.html クリックなしに変更可能であればご教授いただけないでしょうか。 よろしくお願いします。

  • マウスオーバーで横に反転するjqueryについて

    マウスオーバーで横に画像が反転するjqueryのプラグインを探しています。 http://lab.smashup.it/flip/ このサイトのように画像Aから画像Bに反転するのですが、下のサムネイルをクリックするのではなく、画像自体にマウスオーバーすることでその画像が反転するものを探しています。 ※左から右にスライドするものは省きます。 もし同様のものがあるのであれば、jqueryに限らず情報をお待ちしています。 お力添えよろしくお願いします。

  • ActionScript スクロールメニュー

    ActionScriptで以下のサイトのように、下段のサムネールが左右にスクロールするメニューを作成したいのですが、実現方法がわかりません。 http://www.wasedazemi.com/ ・下段の最右、または最左の矢印ボタンを押すとその方向にメニュー1個分スクロールし、下段の真ん中のメニューの画像が上段に表示される。 ・下段の任意のサムネールを押すとその画像が下段真ん中に移動し、上段にその画像が表示される。 ・下段のサムネールはループしていて、スクロールをし続けても端にならずに回り続ける。 ・上段の画像にマウスオーバーすると青い枠線が表示される。 ActionScript 3.0、Flash CS5を利用しています。 ご教授よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • サムネイルをマウスオーバー時に手のアイコンに変わってほしいのですが。。

    サムネイルをマウスオーバー時に手のアイコンに変わってほしいのですが。。 javascriptでサムネイルをクリックすると同一ページの離れた場所に拡大表示するという指示をしています。問題なく正常に動いていますが、サムネイルをマウスオーバーした際に手のアイコンに変わってほしいのですが、矢印のアイコンのままです。 javascriptの関係上、不可能なのでしょうか?? ソースは以下です。 -------------------------------------------------------------------------------- ■拡大表示させる窓 #zoombox ------------------------------------------------------------------------------- ■サムネイル画像 <img src="img/01_s.jpg" width="118" height="80" alt="s01" onClick="showImage(this);"/> -------------------------------------------------------------------------------- ■javascript function showImage(el) { var imageSrc = el.src.replace(/_s\.jpg$/, ".jpg"); document.getElementById("zoombox").innerHTML = '<img src="' + imageSrc + '">'; }