FLASHのお勉強 ーアクションスクリプトの実践的事始めー

(61) FLASHフォトビューアー3   2008/3/7
  ランの写真を撮ったので、花が開くような動きを付けたビューアーということで今回の作品になった。 拡大写真が表示されるところをもう一工夫しようと思ったが、シンプルなほうがよいということで、フォトビューアー2と同様の動きとなった。 サムネイルのロールオーバー効果については、少しは新鮮味を出せたようなに思う。
 サムネイルクリックで、拡大写真を(外部jpgファイル)を表示しているが、外部swfファイルを表示させるようにすれば、サイトメニューにも応用できると思う。 actionscript 2.0 で作成
SAMPLE
ステージの準備
●550*550、背景色黒のステージ(12fps)を設定
●ライブラリーに100*100のサムネイル写真(この場合は8枚)を読み込み、それぞれをシンボルに変換、シンボル名、リンケージ名を p1,p2,,,p8 とする(基準点は左上)
●サムネイルのそれぞれに相当する500*500の写真をswfファイルと同じフォルダに格納、pic1,pic2,,,pic8.jpg とする
スクリプト_root、FRAME1に記述
var photo:Array = new Array();
var picName = ["FlowerA", "FlowerB", "FlowerC", "FlowerD", "FlowerE", "FlowerF", "FlowerG", "FlowerH"];
var num = 8;
var tfFormat = new TextFormat();
tfFormat.size = 18;
tfFormat.color = 0xffffff;
var x0 = 30;//サムネイル表示初期x座標(左)
var y0 = 200;//サムネイル表示初期y座標
var y00 = 30;//拡大写真表示y座標
var w0 = 50;//サムネイル写真表示初期幅

main();
function main() {
        for (i=1; i<=num; i++) {
                photo[i] = attachMovie("p"+i, "p"+i, i);
                with (photo[i]) {
                        _x = x0+w0*i;
                        _y = y0;
                        _width = w0;
                        _alpha = 60;
                }
                photo[i].n = i;
                photo[i].onRollOver = rollover;
                photo[i].onRollOut = rollout;
                photo[i].onRelease = releas;
        }
}
function rollover() {
        var n = this.n;
        wta = (num-n)*w0-w0/2;
        wtb = (n-1)*w0-w0/2;
        var nta = ntb=0;
        for (j=1; j<n; j++) {
                ntb += j;
        }
        for (j=n+1; j<=num; j++) {
                nta += j-n;
        }
        _root.onEnterFrame = function() {
                for (k=1; k<=num; k++) {
                        if (k == n) {
                                with (photo[k]) {
                                        _width += (2*w0-_width)/2;
                                        _x += (w0*k-_x)/2;
                                        _alpha += (100-_alpha)/2;
                                }
                        } else if (k<n) {
                                with (photo[k]) {
                                        _width += (wtb*k/ntb-_width)/2;
                                        _x += (photo[k+1]._x-_width-_x)/2;
                                        _alpha += (60-_alpha)/2;
                                }
                        } else {
                                with (photo[k]) {
                                        _width += (wta*(num+1-k)/nta-_width)/2;
                                        _x += (photo[k-1]._x+photo[k-1]._width-_x)/2;
                                        _alpha += (60-_alpha)/2;
                                }
                        }
                }
                picTitle._x += (photo[n]._x-w0/2-picTitle._x)/3;
                picTitle.tf.text = picName[n-1];
                picTitle.tf.setTextFormat(tfFormat);
        };
        var picTitle = _root.createEmptyMovieClip("picTitle", 120);
        picTitle.createTextField("tf",120,x0,y0-25,100,25);
}
function rollout() {
        picTitle._visible = false;
        _root.onEnterFrame = function() {
                for (k=1; k<=num; k++) {
                        with (photo[k]) {
                                _width += (w0-_width)/2;
                                _x += (x0+w0*k-_x)/2;
                                _alpha += (60-_alpha)/2;
                        }
                }
        };
}
function releas() {
        n = this.n;
        delete onEnterFrame;
        jpg = "pic"+n+".jpg";
        load_mc = _root.createEmptyMovieClip("load_mc", 130);
        var mcLoader:MovieClipLoader = new MovieClipLoader();
        mcLoader.loadClip(jpg,load_mc);
        with (load_mc) {
                _xscale = _yscale=20;
                _x = x0-w0/2+w0*n;
                _y = y0;
        }
        this.onEnterFrame = function() {
                with (load_mc) {
                        _xscale += (100-_xscale)/3;
                        _yscale += (100-_yscale)/3;
                        _x += (x0-_x)/3;
                        _y += (y00-_y)/3;
                }
                load_mc.onRelease = function() {
                        delete this.onEnterFrame;
                        this.removeMovieClip();
                        main();
                };
        };
}
スクリプトの説明
var picName = ["FlowerA",,,,,
  各写真の題名を配列で定義。ここではFlowerAと言うように付けているが、もちろん、写真に応じた題名を入れる。
  サイトメニューの場合は、HOMEとかProfileなどと入れる
var num = 8;
  写真の枚数
var tfFormat = new TextFormat();
  サムネイルロールオーバーで登場する写真の題名の文字の書式設定(以下2行含む)
main();
  関数mainの実施
photo[i] = attachMovie("p"+i, "p"+i, i);
  サムネイルp1,,, を配列photo[1],,,として定義
with (photo[i]) {
  { }内のスクリプトでphoto[i]. を省略
n: ロールオーバーされた写真の番号
 wta:ロールオーバー時にnより番号の大きい写真全体が表示される幅(和)
 wtb:ロールオーバー時にnより番号の小さい写真全体が表示される幅(和)
 nta:ロールオーバー時にnより番号の大きい写真の番号の総和 (n=6なら、nta=7+8(15)
 ntb:ロールオーバー時にnより番号の小さい写真の番号の総和
 表示される各サムネイルの幅は、写真番号をkとすると、
 k=n(ロールオーバされている)の場合: w0*2(100pxで元の写真サイズ)
 kがnより小さい(左側)場合: wtb*k/ntb
 kがnより大きい(右側)場合: wta*(num+1-k)/nta
var picTitle = _root.createEmptyMovieClip("picTitle", 120);
  picTitle.createTextField("tf",120,x0,y0-25,100,25);

 空のむびークリップを作成(picTitle)し、その中にテキストフィールド(tf)を配置する
picTitle._x += (photo[n]._x-w0/2-picTitle._x)/3;(含以下2行)
 ロールオーバーされたサムネイルの上の位置にテキストフィールドを移動させ、サムネイルに相当する番号の題名を表示させる
function rollout() {
 サムネイルのロールアウトで配置を元に戻す
function releas() {
 サムネイルのリリースで外部jpgファイルを、mcLoader を介してload_mcに読み込み、サムネイルの大きさに縮小しておいて、
 本来の大きさに拡大表示させる(この部分は、「FLASHフォトビューアー2」と同じ)
 
flashirohaサイト内  Web全体 
HOME   お勉強総リスト