ToolTip终极写法,气泡提示

package com.zqgame.army.contrl
{
	/**
	 * 自定义气泡提示
	 *@author zhoujie
	 *@date 2011-8-9
	 **/
	import flash.display.DisplayObject;
	import flash.display.DisplayObjectContainer;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormat;
	import flash.utils.Dictionary;
	
	public class ToolTip extends Sprite
	{
		private var dic:Dictionary=new Dictionary();
		private var label:TextField;
		private var _backgound:Sprite;
		
		public function ToolTip()
		{
			super();
			initUI();
		}
		static private var _instance:ToolTip;
		
		static public function getInstance():ToolTip
		{
			if(!_instance)
				_instance=new ToolTip();
			return _instance;
		}
		
		private function regesterModule(area:*):void
		{
			if(area is DisplayObjectContainer)
			{
				if(dic[area.name])return;
				dic[area.name]=1;
				area.addEventListener(MouseEvent.MOUSE_OVER,mouseMoveFunc);
				area.addEventListener(MouseEvent.MOUSE_OUT,mouseMoveFunc);
			}
			else
			{
				var pa:DisplayObjectContainer= (area as DisplayObject).parent as DisplayObjectContainer;
				if(dic[pa.name])return;
				dic[pa.name]=2;
				pa.addEventListener(MouseEvent.MOUSE_OVER,mouseMoveFunc);
				pa.addEventListener(MouseEvent.MOUSE_OUT,mouseMoveFunc);
			}
		}
		
		public function createToolTip(area:*,mess:String):void
		{
			dic[area.name+"mess"]=mess;
			regesterModule(area);
		}
		
		private function mouseMoveFunc(evt:MouseEvent):void
		{
			switch(evt.type)
			{
				case MouseEvent.MOUSE_OUT :
					hide(evt);
					break;
				case MouseEvent.MOUSE_OVER :
					show(evt);
					break;
			}
		}
		
		private function hide(evt:MouseEvent):void
		{
			this.parent.removeChild(this);}
		
		private function show(evt:MouseEvent):void
		{
			var cont:DisplayObjectContainer= evt.currentTarget as DisplayObjectContainer;
			if(dic[cont.name]==2)
			{
				var dis:DisplayObject=evt.target as DisplayObject;
				if(!dic[dis.name+"mess"])return;
				label.htmlText=dic[dis.name+"mess"];
				redraw(5,5);
				(evt.currentTarget as DisplayObjectContainer).addChild(this);
				this.x=dis.x+10;
				this.y=dis.y-10;
			}
			else
			{
				var obj:DisplayObjectContainer= evt.currentTarget as DisplayObjectContainer;
				if(!dic[obj.name+"mess"])return;
				label.htmlText=dic[obj.name+"mess"];
				redraw(20,20);
				obj.parent.addChild(this);
				this.x=obj.x+100;
				this.y=obj.y;
			}
		}
		
		private function redraw(w:Number,h:Number) :void{  
			 w += label.width;  
			 h += label.height;              
			this.graphics.clear();  
			this.graphics.beginFill(0x000000, 0.4);  
			this.graphics.beginFill(0xffffff);  
			this.graphics.drawRoundRect(0, 0, w, h, 5, 5);  
			this.graphics.endFill();  
		}  
		
		private function initUI():void
		{
			label = new TextField();  
			label.autoSize = TextFieldAutoSize.LEFT;  
			label.selectable = false;  
			label.multiline = false;  
			label.wordWrap = false;  
			label.defaultTextFormat = new TextFormat("宋体", 12, 0x666666);  
			label.text = "提示信息";  
			label.x = 5;  
			label.y = 2;  
			addChild(label);   
			mouseEnabled = mouseChildren = false;  
		}
		
		public function closeToolTip(area:*):void
		{
			if(dic[area.name])
			{
				delete dic[area.name];
				delete dic[area.name+"mess"];
			}
			area.removeEventListener(MouseEvent.MOUSE_OVER,mouseMoveFunc);
			area.removeEventListener(MouseEvent.MOUSE_OUT,mouseMoveFunc);
		}
	}
}


花了一天的时间才写出来,在网上找了很多材料,但是发现都不能通用,而且调用起来,特别复杂,所以自己写了一个,只用一句代码就可以了。

createToolTip()直接调用该方法,然后传显示对象和提示文本,注意,该显示对象为任意对象,可以是button,也可以是mc等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值