May 7

写了一个苹果菜单

ActionScript3.0


网上搜了一下,感觉写的有点乱
自己就弄了一个

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;
      }
    }
  }



tags:

to "写了一个苹果菜单"

  1. nemo Says:

    谢谢分享!

Leave a Reply