delaydelegate.as

来自「flex 实现的一个showcase 喜欢flex的朋友可以」· AS 代码 · 共 139 行

AS
139
字号
package com.teknision.utils
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
	

	public class DelayDelegate{
		
		[Bindable]
		public var target:Function;
		
		[Bindable]
		public var delay:Number;
		
		[Bindable]
		public var useframes:Boolean=false;
		
		private var __savedargs:Array;
		
		private var __timer:Timer;
		private var __sprite:Sprite;
		private var __framecount:Number=0;
		
		
/////////////////////////////////////////////////////////////////////////////////////////////
		
	
		
		
		static public function create(i_target:Function,i_delay:Number=1000,i_useframes:Boolean=false):Function{	
			var delegate:DelayDelegate=new DelayDelegate(i_target,i_delay,i_useframes);
			return delegate.call;
			
		}
		
/////////////////////////////////////////////////////////////////////////////////////////////
		
		public function DelayDelegate(i_target:Function=null,i_delay:Number=1000,i_useframes:Boolean=false){
			target=i_target;
			delay=i_delay;
			useframes=i_useframes;	
		}
		
		
		public function call(...args):void{
			__savedargs=args;
			setTimerForCall();
		}
		
		public function clear():void{
			clearTimer();
			clearSprite();
		}
		
/////////////////////////////////////////////////////////////////////////////////////////////
		
		private function setTimerForCall():void{
			clear();
			if(useframes){
				initDelayWithSprite();
			}else{
				initDelayWithTimer();
			}
			
		}
		
		private function makeFinalCall():void{
			if(target!=null){
				target.apply(null,__savedargs);
			}else{
				throw(new Error("No target function specified for this DelayDelegate call"));
			}
		}
		
		
		private function initDelayWithSprite():void{
			clearSprite();
			
			__sprite=new Sprite();
			__sprite.addEventListener(Event.ENTER_FRAME,handleSpriteEnterFrame);
		}
		
		
		private function handleSpriteEnterFrame(event:Event):void{
			if(__framecount<delay){
				__framecount++;
			}else{
				clearSprite();
				makeFinalCall();
			}
		}
		
		private function clearSprite():void{
			if(__sprite!=null){
				__sprite.removeEventListener(Event.ENTER_FRAME,handleSpriteEnterFrame);
				__framecount=0;
				__sprite=null;
			}
		}
		
		
		
		
		private function initDelayWithTimer():void{
			clearTimer();
			__timer=new Timer(delay);
			__timer.addEventListener(TimerEvent.TIMER,handleTimerTrigger);
			__timer.start();
		}
		
		
		private function handleTimerTrigger(event:TimerEvent):void{
			clearTimer();
			makeFinalCall();
		}
		
		
		private function clearTimer():void{
			if(__timer!=null){
				if(__timer.running){
					__timer.stop();
				}
				__timer.removeEventListener(TimerEvent.TIMER,handleTimerTrigger);
				__timer=null;
			}
		}
		
//////////////////////////////////////////////////////////////////////////////////////////////
		
		
		
	}
	
	

	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?