AS3 双击管理工具

package
{
	import flash.display.InteractiveObject;
	import flash.events.MouseEvent;
	import flash.utils.getTimer;
	
	/**
	 * 双击工具(不使用Flash源生的方式,源生的方式是:第二下up时才触发,而这种方式是,第二次down时就触发)
	 * http://blog.csdn.net/linjf520/article/details/9314095
	 * @author jave.lin
	 * @date 2013-7-2
	 */	
	public class DoubleClickUtil{
		
		private static const DOUBLE_CLICK_INTNERVAL:int = 500;
		
		private static var before_double_click_time:int = -1;
		private static var isDoubleClick:Boolean = false;
		private static var lastObj:InteractiveObject;
		
		public static function registerDoubleClick(obj:InteractiveObject):void{
			obj.addEventListener(MouseEvent.CLICK, onClick, false, int.MAX_VALUE);
			obj.addEventListener(MouseEvent.MOUSE_DOWN, onDown, false, int.MAX_VALUE);
			//			obj.addEventListener(MouseEvent.DOUBLE_CLICK, onDoubleClick, false, int.MAX_VALUE);
			obj.doubleClickEnabled = false;
		}
		
		public static function unRegisterDoubleClick(obj:InteractiveObject):void{
			obj.removeEventListener(MouseEvent.CLICK, onClick, false);
			obj.removeEventListener(MouseEvent.MOUSE_DOWN, onDown, false);
		}
		
		//		private static function onDoubleClick(e:MouseEvent):void{
		//			trace("onDoubleClick");
		//		}
		
		private static function onDown(e:MouseEvent):void{
			//			trace("onDown");
			var timer:int = getTimer();
			if(lastObj == e.currentTarget && before_double_click_time != -1){
				//				trace("minus:" + (timer - before_double_click_time));
				//				trace("can double?:" + ((timer - before_double_click_time) <= DOUBLE_CLICK_INTNERVAL));
				if((timer - before_double_click_time) <= DOUBLE_CLICK_INTNERVAL){
					isDoubleClick = true;
					lastObj.dispatchEvent(new MouseEvent(MouseEvent.DOUBLE_CLICK));
					e.stopPropagation();
					e.stopImmediatePropagation();
					e.preventDefault();
				}else{
					isDoubleClick = false;
				}
				before_double_click_time = -1;
				lastObj = null;
			}else{
				if(before_double_click_time == -1){
					before_double_click_time = timer;
				}
			}
			lastObj = e.currentTarget as InteractiveObject;
		}
		
		private static function onClick(e:MouseEvent):void{
			if(isDoubleClick){
				e.stopImmediatePropagation();
				e.stopPropagation();
				e.preventDefault();
				isDoubleClick = false;
				return;
			}
			//			trace("onClick");
		}
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值