模仿下拉列表下拉和收起的动画效果


/**
* 实现下拉列表、弹出菜单出现和隐藏时缓动的效果
*/
package com.gde.dataModel
{
import fl.transitions.Tween;
import fl.transitions.TweenEvent;
import fl.transitions.easing.Regular;

import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextFormat;

public class PopupMenu extends Sprite{
// private var curListMenuState:Boolean;

private var myTween:Tween;
private var listMenu:ListMenus;
private var maskSprite:Sprite;
private var referenceObject:Object;
//
private var playMode:PlayMode;

//隐藏位置
private var hidePosition:Number;
//显示位置
private var showPosition:Number;

/**
* referenceObject参照物对象
*/
public function PopupMenu(sprite:Object):void{
referenceObject = sprite;
var itemTextFormat:TextFormat = new TextFormat();
itemTextFormat.underline = true;

listMenu = new ListMenus();
listMenu.setSelectIcon(true);
listMenu.selectItem(3);
listMenu.setTextFormat(itemTextFormat);
// listMenu.addEventListener(ListMenusEvent.SELECTITEM, playMode.setPlayModeHandler);
// listMenu.addEventListener(ListMenusEvent.SELECTITEM, playModeMenuEnd);

//在按钮的右下方显示菜单
this.addChild(listMenu);

maskSprite = new Sprite();
this.addChild(maskSprite);
}

public function setdata(itemVoArray:Array):void{
listMenu.addItemArray(itemVoArray);
listMenu.isSelectMore = false;

listMenu.y = referenceObject.y + referenceObject.height;
listMenu.x = referenceObject.x + (referenceObject.width - listMenu.width)/2;

maskSprite.graphics.clear();
maskSprite.graphics.beginFill(0xFFFFFF);
maskSprite.graphics.drawRect(0, 0, listMenu.width, listMenu.height);
maskSprite.graphics.endFill();

maskSprite.x = listMenu.x;
maskSprite.y = listMenu.y;
maskSprite.height = listMenu.height * 1.2;
maskSprite.width = listMenu.width;

listMenu.mask = maskSprite;
listMenu.y = listMenu.y - listMenu.height;

hidePosition = listMenu.y - listMenu.height;
showPosition = listMenu.y;
}

public function showListMenu(e:MouseEvent):void{
referenceObject.removeEventListener(MouseEvent.CLICK, showListMenu);
backIn();
}

public function destroyPlayModeMenu(e:MouseEvent):void{
stage.removeEventListener(MouseEvent.MOUSE_UP, destroyPlayModeMenu);
backOut();
}

private function backIn():void{
var startValue:Number = maskSprite.y - listMenu.height;
var finishValue:Number = maskSprite.y;
var duration:Number = 0.4;
myTween = new Tween(listMenu, "y", Regular.easeOut, startValue, finishValue, duration, true);
myTween.addEventListener(TweenEvent.MOTION_FINISH, showFinishHandler);
}

private function backOut():void{
var startValue:Number = maskSprite.y;
var finishValue:Number = maskSprite.y - listMenu.height;
var duration:Number = 0.2;
myTween = new Tween(listMenu, "y", Regular.easeIn, startValue, finishValue, duration, true);
myTween.addEventListener(TweenEvent.MOTION_FINISH, hideFinishHandler);
}

private function showFinishHandler(e:TweenEvent):void{
myTween.removeEventListener(TweenEvent.MOTION_FINISH, showFinishHandler);
// curListMenuState = true;
stage.addEventListener(MouseEvent.MOUSE_UP, destroyPlayModeMenu);
}

private function hideFinishHandler(e:TweenEvent):void{
myTween.removeEventListener(TweenEvent.MOTION_FINISH, hideFinishHandler);
// curListMenuState = false;
referenceObject.addEventListener(MouseEvent.CLICK, showListMenu);
}

}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值