マウスオーバー画像がズームする方法とは?

このQ&Aのポイント
  • マウスオーバーやクリックで画像をズームする方法について教えてください。
  • 具体的なスクリプトの書き方や滑らかなズームをする方法についても知りたいです。
  • 参考になるサイトや実装のポイントも教えてください。
回答を見る
  • ベストアンサー

マウスオーバー(クリック)画像がでズーム

下記のサイトのように画像にマウスが乗ったら、ズームするようにしたいのですが、どのようなスクリプトを書いているのでしょうか? http://www.bobscube.com/ もしくは下記のサイトのようにクリックすると画像がズームするサイト。スクリプト的には同じ(マウスクリックとマウスオーバーの違い)じゃないかと思うのですが・・・。 http://www.opfa.org/ 単純に画像がズームするだけなら、こちらのサイトに載っていた↓で出来るのですが、上記サイトのように滑らかにズームする方法が分かりません。 onClipEvent (load) { this._yscale = 100; this._xscale = 100; } on (rollOver) { this._yscale = 200; this._xscale = 200; } on (rollOut) { this._yscale = 100; this._xscale = 100; } ご教授宜しくお願い致します。

  • Flash
  • 回答数3
  • ありがとう数5

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

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

#1,2です。 補足で書いていらっしゃる意味がわかりました。 だいたい横500~600×縦350~4500ピクセルくらいのステージのドキュメントを新規作成してください(デフォルトぐらい)。 その,ステージの真ん中ぐらいに,画面の面積の4分の1くらい(縦横がそれぞれ半分くらい)のムービークリップを用意してください。 まぁ,適当です。そんな感じだと何でも良いです。 そのムービークリップのアクションパネルに, ---------------------------------- onClipEvent (load) { yScl = this._yscale; xScl = this._xscale; yPos = this._y; xPos = this._x; } on (rollOver) { this.onEnterFrame = function() { this._yscale *= 1.1; this._xscale *= 1.1; this._y += (yPos-_root._ymouse)*0.1; this._x += (xPos-_root._xmouse)*0.1; if (this._yscale>=yScl*2) { this._yscale = yScl*2; this._xscale = xScl*2; } if (this._y>=yPos+100) { this._y = yPos+100; } if (this._y<=yPos-100) { this._y = yPos-100; } if (this._x>=xPos+100) { this._x = xPos+100; } if (this._x<=xPos-100) { this._x = xPos-100; } }; } on (rollOut, dragOut) { this.onEnterFrame = function() { this._yscale *= 0.9; this._xscale *= 0.9; this._y += (yPos-this._y)*0.3; this._x += (xPos-this._x)*0.3; if (this._yscale<=yScl) { this._yscale = yScl; this._xscale = xScl; this._y = yPos; this._x = xPos; this.onEnterFrame = null; } }; } -------------------------------- というスクリプトを,コピペして,パブリッシュしてみてください。 #1の下の方のスクリプトの変形です。 決してうまい書き方とは言えません。 >> 端の方にマウスを移動した場合、そちらに画像も移動する >> マウスがロールアウトしたら、ズームアウトするというのは残したまま と書かれている感じの動きをすると思います。 2 とか 100 とか 0.9 とか 0.3 とか,それらしくするように数値を適当に書いていますが, これらの数をかえると,拡大率や移動スピードなどが変わるはずです。 画面の面積の4分の1くらいのムービークリップだと,ムービークリップの端が見えると思いますが,これをステージより若干大きめにすると,ムービークリップの端は見えなくなると思います。 適当に調節してください。 でも,あーでもないこうでもないと,いろいろ考えて,実現していくのがFlashの面白さであり,Flashの奥深さだと思います。 書いたサンプルも,どこかにあった公式とかではなく,知っている言葉を組み合わせて我流で考えてみただけです。 といっても,「IF文」と「onEnterFrame」とを組み合わせただけですけどね。 最初,質問者さまが提示したスクリプトと基本は同じでしょう。だから考え方は合っていると思います。 スクリプトなんて外には見えません。ちゃんと動けば良いのです。いろいろ考えてやってみてください。

d085jp
質問者

お礼

sassakunさま 本当にこの度はありがとうございました!  おっしゃられている通り、今後はすぐに誰かに聞くのではなく、自分でいろいろ考えてイメージ通りのスクリプトを作っていきたいと思います!

その他の回答 (2)

noname#35109
noname#35109
回答No.2

#1で答えた者です。 補足に書かれている意味が,よく飲み込めないのですがどういうことでしょうか。 >> ズームしたあとに(ズームした大きさの画像のままの状態) ここまではわかります。 >>マウスを移動させるのは、どうしたらできるのか ここがわかりません。 ムービークリップにマウスを重ね,大きくしたあとに,マウスを移動させても大きな状態のままを維持するのであれば,スクリプトの下半分 on (releaseOutside, rollOut) { this.onEnterFrame = function() {  ~~~省略~~~ this.onEnterFrame = null; }; } の部分をなくせばいいわけですし……  ???

d085jp
質問者

補足

説明不足で申し訳ありません・・・。それと、お礼を言うのを忘れていました、ありがとうございます!! 言いたかったことは、既出の下記のサイトのように、画像がズームしたあとに、たとえば端の方にマウスを移動した場合、そちらに画像も移動する、というふうにしたいのです。いまは画像がズームしたあとは、画面が固定されたままの状態で、画像範囲内(ムービークリップの範囲内)でマウスを移動することができませんので・・・。 もちろん画像上(ムービークリップ)からマウスがロールアウトしたら、ズームアウトするというのは残したままで、ということです。 すみません、もちろん最初に質問したことに対するお答えはすでにいただけているので、この質問にも答えていただくのはルール違反かもしれませんが・・・、宜しくお願い致します。 http://www.bobscube.com/

noname#35109
noname#35109
回答No.1

それにしても,キモチ悪いFlashですね。 出来はきれいですし,すごいスクリプトなんですけど,船酔いしそうな… 他との絡みが出てきたり,ActionScriptだけではどうにもならない,作図の部分もありますけど, 単純にムービークリップにマウスか乗ったとき,徐々に拡大, マウスが離れたとき,元のサイズに徐々に戻るというスクリプトを書いておきます。 基本は,質問者さまが書かれている,スクリプトと同じです。 ただ,ゴールに一気に向かわず,徐々にという部分を付け加えているだけです。 他との絡みはないものとするので,ムービークリップのインスタンス名はあえて付けていません。 ムービークリップを適当に作って,以下のスクリプトをコピペしてみてください。 徐々に大きさが変化すると思います。 ---サンプル1(コピペ可能)---------- onClipEvent (load) { yScl = this._yscale; xScl = this._xscale; } on (rollOver) { this.onEnterFrame = function() { this._yscale *= 1.1; this._xscale *= 1.1; if (this._yscale>=yScl*3) { this.onEnterFrame = null; } }; } on (releaseOutside, rollOut) { this.onEnterFrame = function() { this._yscale *= 0.9; this._xscale *= 0.9; if (this._yscale<=yScl) { this._yscale = yScl this._xscale = xScl this.onEnterFrame = null; } }; } ------------------------------- ---解説(コピペは多分不可能)---- //ムービークリップ(MC)がロード(表示)されたとき onClipEvent (load) {   //変数ySclとxSclにこのMCの最初の座標を確保   yScl = this._yscale;   xScl = this._xscale; } //このMCにロールオーバーで on (rollOver) {   //フレームレート毎に1回以下を計算※   this.onEnterFrame = function() {     //このMCのXとYスケールを1.1倍に     this._yscale *= 1.1;     this._xscale *= 1.1;     //もし,Yスケールが元の3倍になったら     if (this._yscale>=yScl*3) {       //この計算終わり       this.onEnterFrame = null;     }     }; } //このMCからマウスが離れたら on (releaseOutside, rollOut) {   //フレームレート毎に1回以下を計算※   this.onEnterFrame = function() {     //このMCのXとYスケールを0.9倍に     this._yscale *= 0.9;     this._xscale *= 0.9;     //もし,Yスケールが元の大きさに戻ったら     if (this._yscale<=yScl) {       this._yscale = yScl       this._xscale = xScl       //この計算終わり       this.onEnterFrame = null;     }   }; } ---解説終わり-------------------- という物です。 もちろん,他の書き方は無数にあります。   //フレームレート毎に1回以下を計算※ の部分ですが,onEnterFrameメソッドと言って, ドキュメントのプロパティで設定したフレームレート(デフォルトでは1/12秒)に1回{ }でくくられた中の計算をします。 MCの位置を,マウスに近づけたいなど,位置まで変える場合は以下のようなスクリプトになります。 ---サンプル2(コピペ可能)---------- onClipEvent (load) { yScl = this._yscale; xScl = this._xscale; yPos = this._y; xPos = this._x; } on (rollOver) { yMou = _root._ymouse; xMou = _root._xmouse; this.onEnterFrame = function() { this._yscale *= 1.1; this._xscale *= 1.1; this._y += (yMou-this._y)*0.1; this._x += (xMou-this._x)*0.1; if (this._yscale>=yScl*3) { this.onEnterFrame = null; } }; } on (releaseOutside, rollOut) { this.onEnterFrame = function() { this._yscale *= 0.9; this._xscale *= 0.9; this._y += (yPos-this._y)*0.3; this._x += (xPos-this._x)*0.3; if (this._yscale<=yScl) { this._yscale = yScl; this._xscale = xScl; this._y = yPos this._x = xPos this.onEnterFrame = null; } }; } ------------------------------- まぁつまり,動かしたいMCのプロパティが増えるごとに,変数やスクリプトも増えるわけです。 あくまでも例ですから,他にも書き方はありますし,場合によって変わるので,それぞれ,その都度考えるしかないですね。

d085jp
質問者

補足

すみません・・・ズームしたあとに(ズームした大きさの画像のままの状態)マウスを移動させるのは、どうしたらできるのかも教えていただけると助かります。何から何まで聞いてすみません。・・・可能だったらで構いません・・・。

関連するQ&A

  • 画像を中央にズームさせるには

    Flash超初心者です。 小さな画像が2、3個横に並んでいて、一つをクリックすると中央にズームし、他の画像をクリックすると先にズームされていた画像がもとの小さな画像に戻るようにしたいです。 http://www.suntory.co.jp/sho-chu/srk/urabanashi.html 過去ログに参考になるものがあり http://oshiete1.goo.ne.jp/kotaeru.php3?q=1444680 少し変更して下記のようにしました。 onClipEvent (load) { yScl = this._yscale; xScl = this._xscale; yPos = this._y; xPos = this._x; } on (rollOver) { this.onEnterFrame = function() { this._yscale *= 1.1; this._xscale *= 1.1; if (this._yscale>=yScl*2.5) { this._yscale = yScl*2.5; this._xscale = xScl*2.5; this.swapDepths(++_root.Depth); } }; } on (rollOut, dragOut) { this.onEnterFrame = function() { this._yscale *= 0.9; this._xscale *= 0.9; this._y += (yPos-this._y)*0.3; this._x += (xPos-this._x)*0.3; if (this._yscale<=yScl) { this._yscale = yScl; this._xscale = xScl; this._y = yPos; this._x = xPos; this.onEnterFrame = null; } }; } でも、これは画像のある同じ場所でズームするので画面の中央でズームさせたいです。 座標を指定すればいいという理屈はわかるのですが、どの部分にどういASを入れたらいいのがわかりません。 また、上記のASでは、ズームしたあとマウスがオブジェクトからはずれると画像がもとの大きさにもどってしまいます。 on (rollOut, dragOut)と入れているからでしょうが、では何を入れたらいいの悩んでしまいましてご相談させていただきました。 どなたかご教授ください。よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • マウスオーバーで画像ズーム(起点取得)

    こんにちは。 マウスオーバーすると画像をズームするスクリプトを考えているのですが、オーバーするときに起点をポインタに合わせるにはどうすればいいのでしょうか? http://oshiete1.goo.ne.jp/kotaeru.php3?q=1444680 こちらの過去ログのスクリプトで、「ズーム」自体はできるのですが、これだと起点が固定になってしまい、画面外にはみ出す部分は見られません。 画面を最大幅に合わせると言うことも考えたのですが、あまり大きな余白が取れず、断念しました。 やりたいのは、例えば200*200の限られた枠があって、そこにデフォルトで200*200の画像があり、マウスを持って行くとマウスポインタが当たっている部分が大きくなるというものです。(枠自体は変わらず、中身だけ大きくなる) *** //ムービークリップ(MC)がロード(表示)されたとき onClipEvent (load) {   //変数ySclとxSclにこのMCの最初の座標を確保   yScl = this._yscale;   xScl = this._xscale; } *** ここの座標をマウスポインタから取得すれば…と思い、いろいろ苦し紛れにやっているのですが、うまく動きません。 ご教授の程、よろしくお願いします。

    • ベストアンサー
    • Flash
  • マウスオーバーやクリック時に拡大表示させたい。

    Flash素人の質問で恐縮です。 よく表現されていると思うのですが、ページ上に複数の小さいムービークリップが並べてあって、大きく見たいときに表示されているムービークリップをマウスオーバーした時に(又はクリック時)に拡大表示されるというようなことを実施したいと思っております。 this.xscale = this.yscale = 200 ; 当該のムービーのAction scriptに上記のScriptを記述したのですが、全く無反応です。 どのようにすれば、拡大表示されるのでしょうか?。 また、外部テキストを読み込んで、それをムービークリップに変換して上記の処理につなげるということは出来ますでしょうか?。

    • ベストアンサー
    • 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
  • scriptを使いまわしたい。

    見よう見まねで下記のようなスクリプトを記述しています。 複数のムービークリップに設定していますが、編集するのにかなり手間がかかります。うまく使いまわす方法はございませんでしょうか…。 また、記述の仕方にも問題等ありましたらご指南ください。。 onClipEvent (load) {  sx_move = Math.floor(Math.random() * -10) - 3;  sy_move = Math.floor(Math.random() * 6) - 3;  s_scale = Math.floor(Math.random() * 40) + 40;  _xscale = (s_scale);  _yscale = (s_scale);  n = 1; } onClipEvent (enterFrame) {  _x += (sx_move);  _y += (sy_move); } on (rollOver) {  mx.behaviors.DepthControl.bringToFront(_root);  this.onEnterFrame = function () {   n += 1;   _x -= (sx_move);   _y -= (sy_move);   if (n < 20) {    _x = (_x + 25) / 1.5;    _y = (_y + 12) / 1.5;    _xscale = (_xscale + 50) / 1.5;    _yscale = (_yscale + 50) / 1.5;   } else if (n < 40) {    stop();   } else if (n < 50) {    _x += 13;    _y += 13;    _alpha -= 20;    _xscale = (_xscale) / 1.2;    _yscale = (_yscale) / 1.2;   } else {    stop();   }  }; }

    • ベストアンサー
    • Flash
  • Flash ふわふわメニュー ロールオーバーでストップ

    下記サイトを参考にして、ふわふわしたメニューを作成したのですが、ボタン(風船)をロールオーバーしたらストップするようにするにはどうしたらよいのでしょうか?使用しているバージョンはFLASH8です。 http://hfm-kenchan.com/Lesson/log_qa/D0609292.htm  onClipEvent (load) {     this._xscale = this._yscale = 10;     vs = 0;  }  onClipEvent (enterFrame) {     vs = vs*0.8+(100-this._yscale)/5;    this._xscale = this._yscale += vs;  }  onClipEvent (load) {     yy = this._y;     rad = 0;  }  onClipEvent (enterFrame) {     this._rotation += 0.2;    rad += 0.1;    this._y = Math.sin(rad)*10+yy;    if (rad > 10)                        } 

  • ムービークリップの拡大縮小

    MCをクリックしたら拡大・縮小をさせたく、過去の投稿を参考にしながら、以下のscriptを作りました。 onClipEvent(load){ v_orgScale = this._xscale; v_orgX = this._x; v_orgY = this._y; zoomState = false; } on(release, releaseOutside){ zoomState = !zoomState;  this.onEnterFrame = function(){   if( zoomState ){    if(this._xscale >= v_orgScale*2.3){     delete this.onEnterFrame;    }else{     this._xscale *= 1.1;     this._yscale *= 1.1;    }   }else if( !zoomState){    if(this._xscale <= v_orgScale){     this._xscale = v_orgScale;     this._yscale = v_orgScale;     delete this.onEnterFrame;    }else{     this._xscale *= 0.9;     this._yscale *= 0.9;    }   }  }; } ただ、これだとMCの基準点(0,0)に対しての拡大縮小なのでクリックしたポイントが拡大するにつれてどんどんずれていきますよね? これをクリックしたポイントがずれないように拡大縮小する事は可能でしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • マウスアウトしているのに、マウスオーバーのままになってしまいます。

    よろしくお願いいたします。 ↓このようなものを作っています。(実際に参考にしているサンプルです。) http://www.oshige.com/flash/mx/swf17/divide_x.html スクリプトは --------------------------------- this.init(); this.onEnterFrame = function() { if (base.hitTest(_root._xmouse, _root._ymouse, false)) { this.rollover(); } else { this.rollout(); } this.resize(); this.setalpha(); }; 以下、function init、function rollout、function rollover、function resize、function setalphaが続きます。 --------------------------------- 最下層のレイヤーに「base」という名前のムービークリップを、ドキュメントと同じサイズ、x=0、y=0で配置。 その上に実際に動かしたいムービークリップが乗っていて、「base」にマウスオーバーしている時にそれぞれのムービークリップの動きをコントロールするというものです。 ですが、マウスを速く動かした時などに、baseからマウスアウトしているにも関わらず、マウスオーバーの状態のままになってしまいます。 色々試してみたところ、実際にbaseやムービークリップが乗っているサイズよりもドキュメントのサイズをかなり大きく取ると解消されたのですが、(サンプルでもそのようになっていました)それではページデザイン上問題があるので・・ スクリプトでどうにかできるものでしょうか? どうぞよろしくお願いいたします。 全然意味が分からない説明になっているかもしれません。不明な点がありましたらご指摘ください。

    • ベストアンサー
    • Flash
  • rollOverで動きながら出現し、rollOutで逆再生で消えていくメニュー

    rollOverで動きながら出現し、rollOutで逆再生で消えていくメニューを作っています。 MCに下記スクリプトを記述することで再生・逆再生は実現できたのですが、 MC内に複数配置したリンクボタンが機能しません。 リンクはHTMLファイルへのリンクです。 どうすればよろしいでしょうか? 記: onClipEvent (load) { nMove = 0; } onClipEvent (enterFrame) { if (nMove != 0) { nNextFrame = this._currentframe+nMove; if (1<=nNextFrame && nNextFrame<=this._totalframes) { this.gotoAndStop(nNextFrame); } else { nMove = 0; } } } on (rollOver) { nMove = 1; } on (rollOut) { nMove = -1; } MC内に配置しているボタンからは on(release){ getURL("aaa.html"); } といった記述をしています。

    • ベストアンサー
    • Flash
  • swfobject:配置したflash内のボタンをクリックしても反応が無い

    お世話になります。 swfobjectで配置したflash内のボタンが、 マウスオーバーのアクションはしますがその後、クリックしてもリンク先に飛ばずに困っています。 ボタンは以下のような仕組みになっています。 ※配置したムービークリップに、以下のスクリプトを入力してボタンにしています。 onClipEvent (load) { this.stop(); flag = "0"; } on (rollOver) { flag = "1"; } on (rollOut, dragOut) { flag = "2"; } onClipEvent (enterFrame) { if (flag == "0") { this.stop(); } else if (flag == "1") { this.nextFrame(); } else if (flag == "2") { this.prevFrame(); } } on (release) { getURL("http://www.test.com"); } 静止しているボタンのような形のMCにマウスオーバーでアニメーションして(光る等)、 クリックしてリンク先に飛ぶようになっています。 ※swfobjectではなく通常の埋め込み方法では、動作確認済みです。 アニメーションに関係するスクリプトは、この問題に関係ないかとは思いますが、もし何か原因の一つであったらと思い記入致しました。 swfobjectでは、ボタンでリンクするのに何か特殊な事が必要なのでしょうか? それとも、上記スクリプトに何か原因があるのでしょうか? 何か小さな助言だけでも大変助かりますので、 ご存知の方、何卒よろしくお願いします。

専門家に質問してみよう