package {
import flash.display.*;
import flash.events.MouseEvent;
import flash.display.Loader;
import flash.net.URLRequest;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
public class coverFlowTypeViewer extends MovieClip {
private var slideNum:Number = 9;//スライドのトータル枚数
private var pic_w:Number = 400;//写真の幅
private var pic_h:Number = 267;//写真の高さ
private var centerPos = Math.floor(slideNum / 2);//中央のスライド番号
private var depth:int;//深度
private var slideNo:Number;//スライド番号(一番左にあるものが0で右へ連番とする)
private var deg:Number = 65;//rotationYにsetする回転角度
private var space:Number = pic_w / 8;//スライド間隔
private var scaleRatio:Number = 1 - pic_w / pic_h * Math.sin(deg / 360);//y方向スケール調整係数
public function coverFlowTypeViewer():void {
//スライドの初期配置
for (var i:uint=0; i<slideNum; i++) {
var pBox:MovieClip = new MovieClip();
var pic:MovieClip = new MovieClip();
pic.x = - pic_w / 2;
pic.y = - pic_h / 2;
addChild(pBox);
pBox.addChild(pic);
pBox.name = "pBox" + i;
pBox.x = stage.stageWidth/2 - (centerPos - i)*100;
pBox.y = stage.stageHeight / 2;
pBox.pos = i;
loadPic(pic,i);
passSlide(pBox,0);
}
//送りボタンのイベント
f_btn.addEventListener(MouseEvent.CLICK, passForward);
//戻りボタンのイベント
b_btn.addEventListener(MouseEvent.CLICK, passBackward);
}
//ボタン操作に反応してスライドを順(逆)送りする
private function passSlide(pBox,btnFlag):void {
slideNo = pBox.pos;
//両端のスライドを不可視化
if (slideNo == 0 || slideNo == slideNum - 1) {
pBox.visible = false;
} else {
pBox.visible = true;
}
//中央の左に配置されたスライド
if (slideNo < centerPos) {
pBox.scaleY = scaleRatio;
var pBox_x = stage.stageWidth / 2 - 1.5*space -(centerPos - slideNo)*space;
var rotY = -deg;
if (btnFlag) {
var twx = new Tween(pBox,"x",Regular.easeOut,pBox.prex,pBox_x,1,true);
var twr = new Tween(pBox,"rotationY",Regular.easeOut,pBox.prerotY,rotY,1,true);
twx.addEventListener(TweenEvent.MOTION_FINISH, m_enabled);
} else {
pBox.x = pBox_x;
pBox.rotationY = rotY;
}
depth = slideNo;
//中央のスライド
} else if (slideNo == centerPos) {
var twsc = new Tween(pBox,"scaleY",Regular.easeOut,scaleRatio,1,1,true);
if (btnFlag == 1) {
pBox_x = stage.stageWidth / 2 -2.5*space;
rotY = -deg; twx = new Tween(pBox,"x",Regular.easeOut,pBox_x,stage.stageWidth / 2,1,true);
twr = new Tween(pBox,"rotationY",Regular.easeOut,rotY,0,1,true);
} else if (btnFlag==2) {
pBox_x = stage.stageWidth / 2 +2.5*space;
rotY = deg;
twx = new Tween(pBox,"x",Regular.easeOut,pBox_x,stage.stageWidth / 2,1,true);
twr = new Tween(pBox,"rotationY",Regular.easeOut,rotY,0,1,true);
} else {
pBox.x = stage.stageWidth / 2;
}
depth = numChildren + (centerPos - slideNo - 1);
//中央の右に配置されたスライド
} else {
pBox.scaleY = scaleRatio;
pBox_x = stage.stageWidth / 2 + 1.5*space -(centerPos - slideNo)*space;
rotY = deg;
if (btnFlag) {
twx = new Tween(pBox,"x",Regular.easeOut,pBox.prex,pBox_x,1,true);
twr = new Tween(pBox,"rotationY",Regular.easeOut,pBox.prerotY,rotY,1,true);
} else {
pBox.x = pBox_x;
pBox.rotationY = rotY;
}
depth = numChildren + (centerPos - slideNo - 1);
}
//深度の設定
setChildIndex(pBox,depth);
}
//ボタン操作をアクティブに
private function m_enabled(event:TweenEvent) {
f_btn.mouseEnabled = true;
b_btn.mouseEnabled = true;
}
//f_btnのイベント
private function passForward(event:MouseEvent):void {
f_btn.mouseEnabled = false; //ボタン操作を不能に
for (var j:uint=0; j<slideNum; j++) {
var mc:MovieClip = MovieClip(getChildByName("pBox" + j));
//切り替え前の位置、回転角
mc.prex = mc.x;
mc.prerotY = mc.rotationY;
//スライド位置切り替え(右へ順送り)
if (mc.pos++ > slideNum - 2) {
mc.pos = 0;
}
passSlide(mc,1);
}
}
//b_btnのイベント
private function passBackward(event:MouseEvent):void {
b_btn.mouseEnabled = false;
for (var j:uint=0; j<slideNum; j++) {
var mc:MovieClip = MovieClip(getChildByName("pBox" + j));
mc.prex = mc.x;
mc.prerotY = mc.rotationY;
if (mc.pos-- < 1) {
mc.pos = slideNum - 1;
}
passSlide(mc,2);
}
}
//写真の読み込み
private function loadPic(load_mc:MovieClip,n:Number):void {
var mcLoader:Loader = new Loader ;
load_mc.addChild(mcLoader);
var m = n + 1;
var url:String = "img/p" + m + ".jpg";
var urlReq:URLRequest = new URLRequest(url);
mcLoader.load(urlReq);
}
}
}
|