写了一个苹果菜单
网上搜了一下,感觉写的有点乱
自己就弄了一个
public class appleMenu extends Sprite
{
private const SPACE_DISDANT:Number = 10; //间距
//private const SPACE_DISDANT_MAX:Number = 18; //放大后的间距
private const BGCOLOR:uint = 0xF6D0D9;
private const SCALE:Number = 0.6; //缩小的倍数
private const INDUCTION:Number = 180;//感应距离
private var _imgArr:Array;
private var picArr:Array = new Array();
private var allW:Number = 0;
private var __w:Number;
private var __h:Number;
private var isOnStage:Boolean = false;
/**
* 图片bitmap数组,图片最好高度相同
* @param imgArr
*/
public function appleMenu(imgArr:Array,_w:Number,_h:Number)
{
_imgArr = imgArr;
__w = _w;
__h = _h;
//画出背景
var bgShap:Shape = new Shape();
bgShap.graphics.beginFill(BGCOLOR);
bgShap.graphics.drawRect(0, 0, __w, __h);
bgShap.graphics.endFill();
addChild(bgShap);
//初始化
init();
}
private function init():void
{
//建立图片对象数组和实例
for each(var bmp:Bitmap in _imgArr) {
var thePic:singlePic = new singlePic(bmp);
thePic.scaleX = SCALE;
thePic.scaleY = SCALE;
picArr.push(thePic);
}
//算出总长度
for each(var pic:singlePic in picArr) {
allW += pic.width;
}
allW += (picArr.length - 1) * SPACE_DISDANT;
//得到第一张图片的位置
var firstX:Number = (__w - allW) * .5 ;
var firstY:Number = __h * .5;
//排列初始图片位置
var currX:Number = firstX - SPACE_DISDANT;
var preW:Number = 0;
for each(var pic2:singlePic in picArr) {
currX += preW + pic2.width * .5 + SPACE_DISDANT;
pic2.x = currX;
pic2.y = firstY;
addChild(pic2);
preW = pic2.width * .5;
}
//都缩小到1,透明度设置为0
for each(var pp:singlePic in picArr) {
pp.scaleX = 0.1;
pp.scaleY = 0.1;
pp.alpha = 0;
}
}
/**
* 显示
*/
public function show():void
{
var i:int = 0;
for each(var pp:singlePic in picArr) {
if (i == (picArr.length - 1)) {
TweenMax.to(pp, 1.5, { alpha:1, scaleX:SCALE, scaleY:SCALE, delay:i * 0.1, ease:Elastic.easeOut,onComplete:showComHandler } );
}else {
TweenMax.to(pp, 1.5, { alpha:1, scaleX:SCALE, scaleY:SCALE, delay:i * 0.1, ease:Elastic.easeOut } );
}
i++;
}
}
/**
* 显示完成后运行
*/
private function showComHandler():void
{
//绑定单一图片事件
for each(var pp:singlePic in picArr) {
pp.buttonMode = true;
pp.addEventListener(MouseEvent.MOUSE_OVER, overHandler);
pp.addEventListener(MouseEvent.MOUSE_OUT,outHandler);
}
//绑定菜单事件
addEventListener(MouseEvent.MOUSE_MOVE, moveStage);
addEventListener(MouseEvent.ROLL_OUT, outStage);
addEventListener(Event.ENTER_FRAME,enterHandler);
}
private function overHandler(e:MouseEvent):void
{
singlePic(e.currentTarget).changgeColor(0x660066);
}
private function outHandler(e:MouseEvent):void
{
singlePic(e.currentTarget).changgeColor(0xffffff);
}
private function moveStage(e:MouseEvent):void
{
if (!isOnStage) { isOnStage = true; trace("on"); }
}
private function outStage(e:MouseEvent):void
{
trace("out");
isOnStage = false;
}
private function enterHandler(e:Event):void
{
//控制大小
for each(var pp:singlePic in picArr) {
//算出鼠标到PP的X距离
var disdance:Number = Math.abs(mouseX - pp.x);
if (disdance > INDUCTION || !isOnStage) {
pp.scaleX += (SCALE - pp.scaleX)*.3;
pp.scaleY += (SCALE - pp.scaleY) * .3;
}else {
var __sca:Number = 1 - disdance / INDUCTION * (1-SCALE);
pp.scaleX += (__sca - pp.scaleX)*.3;
pp.scaleY += (__sca - pp.scaleY)*.3;
}
}
//控制X坐标
var lingshiW:Number = 0;
for each(var pic:singlePic in picArr) {
lingshiW += pic.width;
}
lingshiW += (picArr.length - 1) * SPACE_DISDANT;
//得到第一张图片的位置
var firstX:Number = (__w - lingshiW) * .5 ;
var currX:Number = firstX - SPACE_DISDANT;
var preW:Number = 0;
for each(var pic2:singlePic in picArr) {
currX += preW + pic2.width * .5 + SPACE_DISDANT;
pic2.x += (currX - pic2.x) * 0.1;
preW = pic2.width * .5;
}
}
}
2009-6-9 11:06:24 回复该留言
谢谢分享!