AS3.0实现菜单的飞入效果

package ch13_1
{
	import fl.transitions.*;
	import fl.transitions.easing.*;
	
	import flash.display.Graphics;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.filters.GlowFilter;
	import flash.geom.Rectangle;
	import flash.text.TextField;
	
	public class FlyText extends MovieClip
	{
		//设置一个布尔值menuIsOn,与菜单是否显示同步更新
		var menuIsOn:Boolean = false;
		//使用数组menuText存储各个菜单的显示文字
		var menuText:Array = ["首页","新闻","案例","合作","服务","产品","联系我们","友情链接","Horidream"];
		//以一个矩形实例menuRec定义感应区
		var menuRec:Rectangle = new Rectangle(0,0,80,24*menuText.length);
		//声明一个MovieClip实例canvas,作为菜单的容器
		var canvas:MovieClip = new MovieClip();
		//使用Graphics实例g引用canvas.graphics
		var g:Graphics = canvas.graphics;
		
		public function FlyText()
		{
			
			
			stage.frameRate = 30;
			
			//使用循环结构,绘制菜单
			for (var i:uint = 0; i<menuText.length; i++) {
				//菜单栏的颜色为随机色
				var color:uint = 0xFFFFFF*Math.random();
				//绘制各个菜单栏(矩形)
				g.moveTo(0,24*i);
				g.beginFill(color);
				g.drawRect(0,24*i,80,24);
				g.endFill();
				//设置菜单栏的显示文字
				var t:TextField = new TextField();
				//显示内容对应menuText的各元素
				t.text = menuText[i];
				//设置文本的位置
				t.x = 10;
				t.y = 24*i + 3;
				//设置文本不可选
				t.selectable = false;
				//文字外发光描边
				t.filters = [new GlowFilter(0xFFFFFF,1,2,2,255)];
				//将文字添加到canvas的显示列表
				canvas.addChild(t);
			}
			//在菜单栏外绘制一圈黑色边框
			g.lineStyle(1);
			g.drawRect(0,0,80,24*menuText.length);
			addChild(canvas);
			//程序开始时使用飞出效果,将菜单栏隐藏
			TransitionManager.start(canvas,{type:Fly,duration:.3,direction:1,easing:Strong.easeIn});
			//注册鼠标移动的侦听器showMenu
			stage.addEventListener(MouseEvent.MOUSE_MOVE,showMenu);
		
		}
		private function showMenu(e:MouseEvent):void {
			//当鼠标移动到感应区,且当前菜单未显示时
			if (menuRec.contains(mouseX,mouseY) && !menuIsOn) {
				//菜单飞入
				TransitionManager.start(canvas,{type:Fly,duration:.3,direction:0,easing:Back.easeOut});
				//注销侦听showMenu函数
				stage.removeEventListener(MouseEvent.MOUSE_MOVE,showMenu);
				//注册侦听鼠标移出感应区的侦听器closeMenu
				stage.addEventListener(MouseEvent.MOUSE_MOVE,closeMenu);
				//与menuIsOn变量同步菜单状态
				menuIsOn = true;
			}
		}
		private 	function closeMenu(e:MouseEvent):void {
			//当鼠标移动感应区,且状态为显示时
			if (!menuRec.contains(mouseX,mouseY) && menuIsOn) {
				//菜单飞出
				TransitionManager.start(canvas,{type:Fly,duration:.3,direction:1,easing:Strong.easeIn});
				注册鼠标移动的侦听器showMenu
				stage.addEventListener(MouseEvent.MOUSE_MOVE,showMenu);
				//注销侦听鼠标移出感应区的侦听器closeMenu
				stage.removeEventListener(MouseEvent.MOUSE_OUT,closeMenu);
				//与menuIsOn变量同步菜单状态
				menuIsOn = false;
			}
		}
	}
}
		

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值