ActionScriptスクロールメニューを実現する方法

このQ&Aのポイント
  • ActionScriptを利用して、下段のサムネールが左右にスクロールするメニューを作成する方法を解説します。
  • メニューのスクロールは最右または最左の矢印ボタンを押すことで行えます。下段の真ん中のメニューの画像は、上段に表示されます。
  • また、下段の任意のサムネールを押すと、その画像が下段真ん中に移動し、上段にその画像が表示されます。上段の画像にはマウスオーバーすると青い枠線が表示されます。
回答を見る
  • ベストアンサー

ActionScript スクロールメニュー

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

  • Flash
  • 回答数1
  • ありがとう数9

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

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

質問内容が欲張り過ぎでしょう。 まるで業者に対する客の仕様発注書です。 質問に全て回答するなら本ができてしまいますよ。 (内容がそれだけ難しいという意味ではなく,「論理」や「手順」を説明するには相当な字数や画像が必要という意味。) 字数制限も厳しく画像が1枚しか貼れないココでは説明不可能です。 特に, >・上段の画像にマウスオーバーすると青い枠線が表示される。 それくらいのこと モーショントゥイーンとかシェイプトゥイーンとか使って自力で作成すべきでしょう。 とにかく字数制限もあるため 上記以外の項目についてスクリプトのみ(日本語説明抜き)で回答します。 CS5 で新規ドキュメントを作成し フレーム1にコピペするスクリプト例です↓。 //--------------------------- [SWF(frameRate = "20",width = "940",height = "380")] var col_arr:Array = [0xFF6666,0x66FF66,0x6666FF,0xCCCC00,0xCC66CC,0x66CCCC]; var c_len:int = col_arr.length; var cnt:int = 0; var big_mc_arr:Array = new Array(); for (var i:int = 0; i<c_len; i++) { big_mc_arr[i] = new MovieClip(); with (big_mc_arr[i].graphics) { beginFill(col_arr[i]); drawRect(0,0,900,280); endFill(); } big_mc_arr[i].x = 20; big_mc_arr[i].y = 20; addChild(big_mc_arr[i]); } var slide_mc:MovieClip = new MovieClip(); slide_mc.x = 50; slide_mc.y = 310; addChild(slide_mc); var small_mc_arr:Array = new Array(); for (i= 0; i<c_len*2; i++) { small_mc_arr[i] = new MovieClip(); with (small_mc_arr[i].graphics) { beginFill(col_arr[(i>=c_len)? i-c_len:i]); drawRect(0,0,160,50); endFill(); } small_mc_arr[i].n = i; small_mc_arr[i].x = 170 * i; small_mc_arr[i].addEventListener(MouseEvent.CLICK,setCnt); slide_mc.addChild(small_mc_arr[i]); } var mask_mc:MovieClip = new MovieClip(); with (mask_mc.graphics) { beginFill(0x000000); drawRect(0,0,840,50); endFill(); } mask_mc.x = 50; mask_mc.y = 310; addChild(mask_mc); slide_mc.mask = mask_mc; var l_btn_shape:Shape = new Shape(); with (l_btn_shape.graphics) { beginFill(0x666666); drawRect(0,0,20,50); endFill(); beginFill(0xFFFFFF); moveTo(3,25); lineTo(15,18); lineTo(15,32); endFill(); } var l_btn:SimpleButton = new SimpleButton(); with (l_btn) { upState = overState = downState = hitTestState = l_btn_shape; x = 20; y = 310; } addChild(l_btn); var r_btn_shape:Shape = new Shape(); with (r_btn_shape.graphics) { beginFill(0x666666); drawRect(0,0,20,50); endFill(); beginFill(0xFFFFFF); moveTo(5,18); lineTo(17,25); lineTo(5,32); endFill(); } var r_btn:SimpleButton = new SimpleButton(); with (r_btn) { upState = overState = downState = hitTestState = r_btn_shape; x = 900; y = 310; } addChild(r_btn); slide_mc.addEventListener(Event.ENTER_FRAME,approacheSlide); function approacheSlide(e:Event):void { e.target.x += ((cnt*170+50)-e.target.x)/5; if (e.target.x>50) { e.target.x-=c_len*170; cnt-=c_len; } else if (e.target.x < 50-c_len*170) { e.target.x+=c_len*170; cnt+=c_len; } } l_btn.addEventListener(MouseEvent.CLICK,upCnt); function upCnt(e:Event):void { cnt+=1; setBigMC(); } r_btn.addEventListener(MouseEvent.CLICK,downCnt); function downCnt(e:Event):void { cnt-=1; setBigMC(); } function setCnt(e:Event):void { cnt=2-e.currentTarget.n; setBigMC(); } function setBigMC():void { addChild(big_mc_arr[(cnt <= 2-c_len)?2-cnt-c_len:2-cnt]); } setBigMC(); var tmr:Timer=new Timer(5000,0); tmr.addEventListener(TimerEvent.TIMER,downCnt); tmr.start(); this.addEventListener(MouseEvent.MOUSE_OVER,stopTimer); function stopTimer(e:MouseEvent):void { tmr.stop(); } this.addEventListener(MouseEvent.MOUSE_OUT,startTimer); function startTimer(e:MouseEvent):void { tmr.start(); } var point_sh:Shape = new Shape(); with (point_sh.graphics) { beginFill(0x666666); moveTo(0,0); lineTo(0,-3); lineTo(74,-3); lineTo(80,-8); lineTo(86,-3); lineTo(160,-3); lineTo(160,-0); endFill(); } point_sh.x=390; point_sh.y=309; addChild(point_sh); //--------------------------- 上記スクリプトを フレーム1 にコピペして そのままパブリッシュやムービープレビューなどすれば動作確認できると思います。 本来 Sprite で済む部分にも あえて MovieClip を使っているのは 「本来そのようなものはそういうムービークリップを手作業で作れば良い。」 という意味合い(思い)を含めています。

tack41_99
質問者

お礼

丁寧なご回答ありがとうございます!! 頂いたサンプルを元に作成してみます。

関連するQ&A

  • FlashのメニューのActionscriptについて教えてください

    写真をみせるギャラリーサイトを作りたいと思っています。構成はサムネイルとしての小さい画像、メインの大きい画像、次の画像にうつる矢印です。メインの画像は50枚ほどで、外部jpgをloadMovieで読み込ませようと思っています。 そこで質問なのですが、 1.サムネイルをボタンにして、オンマウスで枠がついて、マウスがはずれるとゆっくり枠も消えるというムービーにしたいのですが、これはどういうActionscriptなのでしょうか? 2.次の画像に移る矢印もボタンなのですが、これもActionscriptでできるんでしょうか?たとえば今表示されている画像を判断してその次の数字の画像を呼び出す、みたいなことだと思うんですが…。どうなんでしょうか? わかりにくかったら申し訳ないのですがよろしくお願いします!

  • 画像スクロールメニュー

    http://www.rakuten.co.jp/plus-tick/ ↑まさにこのメニューをそのまんま画像がスクロールするメニューを作りたいのですが、イマイチ作り方が分かりません(泣) とくに右側の矢印と下にある●のしくみがわかりませんので宜しくお願いします!!

  • スクロールメニュー

    スクロールメニューを作成し、スクロールしているメニューボタンを押したときに、同じ画面上に画像を表示したいのですが、表示されません。 下のURLのフォトアルバム06 (コメントなし)のようなものをつくろうとしています。 http://flash-bucks.com/flash/album/index.html ムービーになっているボタンを押したときに同じ画面上に画像を表示する方法を教えていただきたいです。

    • ベストアンサー
    • Flash
  • Flashでのマウスの位置に合わせてスクロール。

    作業環境 PC : Windows7 Flash : Flash8 Actionscript : 2.0 困っています。 Flashの制作でマウスの位置に反応して左右にスクロールするのもを作りたいのですが、マウスに反応はしてくれても、画像のループ処理がうまくいかず、画像が途切れてしまいます。 ■参考にしているサイト http://acchan.s55.xrea.com/flash/scroll_menu/0501/scroll_menu0501b.html 僕が作ろうとしている状況は、下記の通りです。 ・ステージサイズ1160pxで、高さは223px ・スクロールする画像の全体での長さは3240px ・スクロールする画像は各ボタンになっていて、180pxが18個並んでいます。 理想としては、マウスの位置に合わせて、画像が両サイドに永久ループし、マウスオーバーしている画像は、その画像のリンク先に飛ばせるようにしたいのです。 どうかお力おお貸しください。 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • マウス追従とスクロール

    マウス追従とスクロール flashCS4(Mac) actionscript2.0 初心者です。 以下サイトのようなサムネイル画像をマウス追従とスクロールで表示させる仕掛けを作りたいのですが、 初心者でも理解できる説明に出会いません。 http://www.seanizzard.com/izzard_gallery.html サムネイル写真を横に10ヶ並べ on (release) { _root.big_mc.gotoAndStop("p1"); } で拡大写真を表示するまではできたのですが、マウス追従とスクロールがわかりません。 実際には20ヶ~ほどサムネイル写真を並べ、通常は10ヶほど表示させ、隠れている写真はスクロールで表示するようにしたいと考えています。マスクも必要ですよね。 (軽量化のため外部ファイルにする方が良いのでしょうが、まだそこまでできません。) onClipEvent(enterFrame) { _x+=_xmouse を使うのでしょうか? 質問の仕方もこれでよいのか、、どなたかお力をおかしください。 よろしくお願いします。

  • ブラウザのスクロールバーでスクロール領域を限定したい。

    ブラウザのスクロールバーでスクロール領域を限定したい。 お世話になります。 左に縦長のswf、真ん中にコンテンツ、右に縦長のswfを表示するページを作ろうと 思っています。 そして、swfは表示されてなくてもいいようなものとして、 ブラウザの下の横スクロールバーには、 真ん中のコンテンツの範囲内だけを移動できる横スクロールバーとしたい と思っています。 つまり真ん中のコンテンツが隠れた場合にスクロールバーが出てくるが、 swfが隠れただけでは出てこない、 そして、スクロールバーをめいっぱいスライドしても、コンテンツの端までしか いけず、swfの端まではいかない、というものです。 こういったことがJSかCSSで可能なのでしょうか? おわかりになる方いらっしゃいましたら、 教えていただけないでしょうか? お手数をおかけしますが、よろしくお願いします。

  • 十字キーでスクロール

    既出の質問であったならご容赦ください。 以前は、PC画面の縦スクロールは「指」を画面の端の△▽にあわせてスライドパッドをトントンすることで閲覧していました。また、△▽にあわせた後、十字キーでスクロールできたのですが。 数日前から、 十字キーを押すとカーソルが点滅して動くのですが、画面をスクロールすることができなくなりました。また、画面によっては十字キーを押すと画面の最上段まで移動したり、最下段まで移動したりする場面もあります。 以前のように 十字キーでスムーズに画面のスクロールができるようになりたいのですが、どうしたらよいでしょうか? よろしくお願いいたします。

  • スクロール処理(早急にお伺いしたいです。)

    Version:MX2004ですが、MXコンポーネントを導入済みで、 ScrollBarコンポーネント利用する事を前提にお伺いします。 イメージ(写真)が3枚ほど見える窓が開いた矩形を用意し、その中をイメージがスクロールするようなものを作りたいのですが、どのようにしたら良いでしょうか?。 表示したいサムネイル画像が20枚ほどあり、横スクロールして表示させながら、当該のサムネイルをクリックしたら別のフィールドにその拡大画像を表示するようなコンテンツを作りたいのです、。 どうぞ宜しくお願い致します。 (自身の思いを文章に表現出来難いので、宜しければキャッチボールしながらで結構ですので、宜しく御願いします)

    • ベストアンサー
    • Flash
  • ActionScriptのLoaderクラス

    以下、FLASHのカテゴリーがあることに気付かずに、プログラミング(その他)に投稿してしまいましたので、再投稿いたします。よろしくお願いいたします。 以下はActionScript3.0を用いたフォトギャラリーで、外部のXMLファイルに記述しているパスをFLASH上に読み込み、それを参照して外部のフォルダからサムネイル画像を読み込むプログラムの一部です。 おそらく、ActionScriptの超初歩的なことが分かっていないのだと思います。 申し訳ございませんが、ご教示ください。 1 var thumbLoader_obj:Loader; 2 for(var i:uint=0;i<8;i=i+1){ 3 var thumbBtn:MovieClip=this["btn0"+(i+1)+"_mc"]; 4 var thumbUrl:URLRequest=new URLRequest(imgThumb_arr[i]); 5 thumLoader_obj=new Loader(); 6 thumbLoader_obj.load(thumbUrl); 7 thumbLoader_obj.x=3; 8 thumbLoader_obj.y=3; 9 thumbBtn.addChild(thumbLoader_obj); 10 } 以上は配列:imgThumb_arrに格納しているサムネイル画像のパスを参照して、loadメソッドを用いて インスタンス:thumLoader_objに読み込んだサムネイル画像を、サムネイル画像の枠を格納しているインスタンス:thumbBtnにループ処理で配置させるプログラムです。 3行目からわかる通り、サムネイル画像の枠のインスタンス名はbtn01_mc~btn08_mcで、 7行目と8行目は単なるサムネイル画像と枠の配置調整のための座標設定です。 さて、質問なのですが、5行目の代わりに1行目を thumLoader_obj=new Loader(); と書いて、5行目をコメントアウト(もしくは削除)してもプログラム的には問題ないように初心者の私には思えてしまうのですが、このようにすると、最後のサムネイル枠(btn08_mc)にしかサムネイル画像が読み込まれません。最初の通りだとすべての枠に該当するサムネイル画像が読み込まれてうまくいきます。明らかなプログラム上の違いがあるのだと思いますが、調べてみても簡単には分かりませんでした。どなたか、お教えいただければ幸いです。

  • 新グーグルマップでメニューが表示できない

    設定をしようと左上のメニューをタップすると上段に「現在地の共有・・・はここから」又、下段には「保存済みの・・・できます」と各々紺地に白抜きで表示されますがタップしても変わりません。 また、左上のメニューに?マークが三本線に小さくかぶさっています。 解決方教えて下さい。