⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 delaydelegate.as

📁 flex 实现的一个showcase 喜欢flex的朋友可以
💻 AS
字号:
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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -