| import mx.transitions.Tween;
import mx.transitions.easing.*;
//題名
title = "紅葉の京都を訪ねて";
//シリーズ名
var subMenu = ["銀閣寺", "真如堂", "法然院", "青蓮院", "高台寺", "清水寺"];
//シリーズごとのスライド数
var slideNum = [9, 6, 4, 9, 13, 10];
//変数の初期値
var num = slideNum[0];
var serNo = 0;
var picNo = 1;
//文字のフォーマット
txtFormat1 = new TextFormat();
txtFormat1.color = 0xFFFFFF;
txtFormat1.size = 16;
txtFormat2 = new TextFormat();
txtFormat2.color = 0xFFFFFF;
txtFormat2.size = 13;
txtFormat3 = new TextFormat();
txtFormat3.color = 0xffc6b1;
txtFormat4 = new TextFormat();
txtFormat4.color = 0xFFFFFF;
txtFormat4.size = 18;
//題名表示
this.createTextField("titleTxt",0,10,10,200,50);
titleTxt.text = title;
titleTxt.setTextFormat(txtFormat1);
//サブメニュー(ギャラリーのシリーズ名)と選択されたシリーズ名の表示用テキストフィールドの配置
this.createEmptyMovieClip("submenuBar",this.getNextHighestDepth());
submenuBar._x = 20;
submenuBar._y = 40;
this.createEmptyMovieClip("selectedSubmenu",this.getNextHighestDepth());
selectedSubmenu.createTextField("tf",this.getNextHighestDepth(),0,0,100,30);
selectedSubmenu._x = 20;
selectedSubmenu._y = Stage.height-80;
//送りボタンの表示とロールオーバー効果
this.createEmptyMovieClip("forward_btn",this.getNextHighestDepth());
forward_btn.createTextField("tf",this.getNextHighestDepth(),0,0,100,50);
forward_btn.tf.text = "Forward >>";
forward_btn.tf.setTextFormat(txtFormat2);
forward_btn.onRollOver = function() {
forward_btn.tf.setTextFormat(txtFormat3);
};
forward_btn.onRollOut = function() {
forward_btn.tf.setTextFormat(txtFormat2);
};
//戻りボタンの表示とロールオーバー効果
this.createEmptyMovieClip("backward_btn",this.getNextHighestDepth());
backward_btn.createTextField("tf",this.getNextHighestDepth(),0,0,100,50);
backward_btn.tf.text = "<< Backward ";
backward_btn.tf.setTextFormat(txtFormat2);
backward_btn.onRollOver = function() {
backward_btn.tf.setTextFormat(txtFormat3);
};
backward_btn.onRollOut = function() {
backward_btn.tf.setTextFormat(txtFormat2);
};
//サムネイルメニューの初期表示
var menu_mc = this.createEmptyMovieClip("menu_mc", 100);
loadThumb(0);
//スライドの初期表示
this.createEmptyMovieClip("screen",this.getNextHighestDepth());
loadPic(serNo,picNo);
//フルスクリーン表示及びリサイズのリスナーの設定
Stage.scaleMode = "noScale";
Stage.align = "LT";
function fullScale() {
menuBar._x = 20;
menuBar._y = 40;
menu_mc._x = (Stage.width-num*50)/2;
menu_mc._y = Stage.height-80;
screen._x = (Stage.width-screen_w)/2;
screen._y = (Stage.height-screen_h)/2-50;
forward_btn._x = Stage.width-150;
forward_btn._y = Stage.height-150;
backward_btn._x = 100;
backward_btn._y = Stage.height-150;
selectedSubmenu._y = Stage.height-80;
fullscreen_btn._x = Stage.width - 150;
fullscreen_btn._y = 50;
}
myListener = new Object();
myListener.onResize = function() {
fullScale();
};
Stage.addListener(myListener);
//フルスクリーンボタンの設置と設定
this.createEmptyMovieClip("fullscreen_btn",this.getNextHighestDepth());
fullscreen_btn.createTextField("tf",this.getNextHighestDepth(),0,0,100,30);
fullscreen_btn.tf.text = "FULLSCREEN";
fullscreen_btn.tf.setTextFormat(txtFormat2);
fullscreen_btn.onRelease = function() {
Stage["displayState"] = "fullScreen";
};
//初期配置
fullScale();
//サブメニュー(シリーズ名)の表示と、イベントアクション
for (i=0; i<subMenu.length; i++) {
menuB = submenuBar.createEmptyMovieClip("submenuItem"+i, 100+i);
menuB._y = 25*i;
menuTxt = menuB.createTextField("tf", 100+i, 0, 0, 60, 30);
menuB.tf.text = subMenu[i];
menuB.tf.setTextFormat(txtFormat2);
menuB.no = i;
menuB.onRollOver = menubOver;
menuB.onRollOut = menubOut;
menuB.onRelease = menuRels;
}
function menubOver() {
this.tf.setTextFormat(txtFormat3);
}
function menubOut() {
this.tf.setTextFormat(txtFormat2);
}
function menuRels() {
serNo = this.no;
loadThumb(serNo);
loadPic(serNo,1);
}
//サムネイルメニューの表示(asファイルの参照)とリリース時のアクション
function loadThumb(serNo) {
num = slideNum[serNo];
menu_mc._x = (Stage.width-num*50)/2;
menu_mc._y = Stage.height-80;
for (j=0; j<=20; j++) {
var dammy_mc = menu_mc.createEmptyMovieClip("dammy_mc", j);
}
for (i=1; i<=num; i++) {
var mc:MovieClip = menu_mc.createEmptyMovieClip("thumb"+i, i);
mc.createEmptyMovieClip("loader",i);
var thumb_mc:menuBar_1 = new menuBar_1(serNo, num, i, mc, 25, 0);
mc.clickedNum = i;
mc.onRelease = function() {
picNo = this.clickedNum;
loadPic(serNo,picNo);
};
}
new Tween(menu_mc, "_alpha", Regular.easeOut, 0, 100, 3, true);
}
//スライド(写真)の表示
function loadPic(serNo, picNo) {
selectedSubmenu.tf.text = subMenu[serNo]+" "+picNo+"/"+slideNum[serNo];
selectedSubmenu.tf.setTextFormat(txtFormat2);
var picLoader = new MovieClipLoader();
jpg = "img/pic"+serNo+picNo+".jpg";
picLoader.loadClip(jpg,screen);
var pListener = new Object();
pListener.onLoadInit = function() {
screen_w = screen._width;
screen_h = screen._height;
screen._x = (Stage.width-screen_w)/2;
screen._y = (Stage.height-screen_h)/2-50;
tween1 = new Tween(screen, "_alpha", Regular.easeOut, 0, 100, 2, true);
};
picLoader.addListener(pListener);
//送りボタン、戻りボタンのアクション
forward_btn.onRelease = fwSlide;
backward_btn.onRelease = bwSlide;
function fwSlide() {
if (picNo++>slideNum[serNo]-1) {
picNo = 1;
}
loadPic(serNo,picNo);
}
function bwSlide() {
if (picNo--<2) {
picNo = slideNum[serNo];
}
loadPic(serNo,picNo);
}
} |
最初表示する銀閣寺シリーズの枚数
シリーズナンバー 0 (銀閣寺)
スライドナンバー 1
サブメニュー(シリーズ名)を格納するMC
クリックされたサブメニュー表示用MC
その中にテキストフィールド
送りボタン用MC
ロールオーバーで色を変える
ロールアウトで色を戻す
戻りボタン
サムネイルメニュ全体格納用MC
シリーズ0(銀閣寺)のサムネイル表示
写真表示用スクリーンの作成
初期設定(0,1)の写真表示
scaleModeをnoScaleに
座標基準を左上に
ウィンドウ内の配置座標(相対値)を各インスタンスごとに設定
リスナーオブジェクトの作成
リサイズされるごとに再配置
リスナーのセット
fullscreen_btnの作成
fullscreen_btnがリリースされたら
フルスクリーンモードに
サブメニュー(シリーズ)の数だけ
submenuBarの中にMCを作成し
その中にテキストフィールドを作成
そこにシリーズ名を表示
ロールオーバーで色を変える
リリースされたシリーズの
サムネイルと
一番目の写真を表示する
サムネイル表示関数
シリーズの枚数
表示されていたサムネイル群を非表示にするために空のMCで上書き
サムネイル表示用にそれぞれのMCを作成
入れ子のMCを作成
menuBar_1クラスでサムネイル作成・表示
サムネイルのリリースで該当番号の写真を表示
サムネイル群の切り替え表示にフェイドイン効果を付与
写真のロードと表示関数
選択されたシリーズ名と番号を表示
写真のロード
ロード後の最初のフレームで
写真の幅、高さを取得し、座標を決める
写真表示にフェードイン
forward_btnリリースごとに番号を1ずつ増やし、総枚数に達したら1に戻す
番号が1になったら最後の番号に
|
class menuBar_1 extends MovieClip {
public function menuBar_1(serNo:Number, num:Number, n:Number, mc:MovieClip, x0:Number, y0:Number) {
var w0 = 50;
var h0 = 50;
var url = "img/p"+serNo+n+".jpg";
mc.loader.loadMovie(url);
drawLine(mc);
mc._x = x0+w0*(n-1);
mc._y = y0;
mc._xscale = mc._yscale=50;
mc._alpha = 60;
mc.onRollOver = rollover;
mc.onRollOut = rollout;
function rollover() {
var wta = (num-n)*w0-w0/2;
var wtb = (n-1)*w0-w0/2;
var nta = 0;
var ntb = 0;
for (var j:Number = 1; j<n; j++) {
ntb += j;
}
for (j=n+1; j<=num; j++) {
nta += j-n;
}
_root.onEnterFrame = function() {
for (var k:Number = 1; k<=num; k++) {
var p_mc = _root.menu_mc["thumb"+k];
var kplus = k+1;
var nextp_mc = _root.menu_mc["thumb"+kplus];
var kminus = k-1;
var prep_mc = _root.menu_mc["thumb"+kminus];
if (k == n) {
p_mc._width += (2*w0-p_mc._width)/2;
p_mc._x += (w0*(k-1)-p_mc._x)/2;
p_mc._height += (2*h0-p_mc._height)/2;
p_mc._y += (y0-h0-p_mc._y)/2;
p_mc._alpha += (100-p_mc._alpha)/2;
} else if (k<n) {
p_mc._width += (wtb*k/ntb-p_mc._width)/2;
p_mc._x += (nextp_mc._x-p_mc._width-p_mc._x)/2;
p_mc._height += (wtb*k/ntb-p_mc._height)/2;
p_mc._y += (y0-wtb*k/ntb+w0-p_mc._y)/2;
p_mc._alpha += (60-p_mc._alpha)/2;
} else {
p_mc._width += (wta*(num+1-k)/nta-p_mc._width)/2;
p_mc._x += (prep_mc._x+prep_mc._width-p_mc._x)/2;
p_mc._height += (wta*(num+1-k)/nta-p_mc._height)/2;
p_mc._y += (y0-wta*(num+1-k)/nta+w0-p_mc._y)/2;
p_mc._alpha += (60-p_mc._alpha)/2;
}
}
};
}
function rollout() {
_root.onEnterFrame = function() {
for (var k:Number=1; k<=num; k++) {
var p_mc = _root.menu_mc["thumb"+k];
p_mc._width += (w0-p_mc._width)/2;
p_mc._height += (h0-p_mc._height)/2;
p_mc._x += (x0+w0*(k-1)-p_mc._x)/2;
p_mc._y += (y0-p_mc._y)/2;
p_mc._alpha += (60-p_mc._alpha)/2;
}
};
}
function drawLine(mc) {
mc.lineStyle("2",0xffffff);
mc.moveTo(0,0);
mc.lineTo(100,0);
mc.lineTo(100,100);
mc.lineTo(0,100);
mc.lineTo(0,0);
}
}
} |
サムネイルの周囲を白線で囲うため、今回追加(関数:drawLine) |