有关mouseStop事件功能的实现
先推荐一个鼠标双击的实现,虽然Flash as3已经有了,但是我觉得这种实现非常经典。
2个全局变量,一个记录每次鼠标up时的getTimer,另外一个记录双击间隔(可设置)
每次mouse down的时候 用获取getTimer和全局的up值相减 结果和间隔值对比 即可发布双击事件 非常经典
现在我想实现一个mouseStop的事件 和mouseMove相反 设置一个stopTime 然后当鼠标停留时间超过此致时 发布mouseStop事件
代码如下:
//
// Copyright
// 延迟管理器
//
package managers
{
import flash.events.TimerEvent;
import flash.utils.Dictionary;
import flash.utils.Timer;
public class DelayManager
{
//记录所有已经开始延迟处理的方法 以保证在这个处理过程中不会被垃圾回收回收掉
private static const functions:Dictionary = new Dictionary ( true );
/**
* 延迟调用
*/
public static function delayCall ( secs:Number , fun:Function , overwrite:Boolean , params:Array = null ):DelayManager {
if ( secs > 0 ) {
return new DelayManager ( secs , fun , overwrite , params );
} else {
return null;
}
}
/**
* 使一个延迟处理失效
*/
public static function destory ( target:DelayManager ):void {
if ( functions [ target._fun ] == null ) return;
target._timer.stop ();
target._timer.removeEventListener ( TimerEvent.TIMER , target._timerHandler );
functions [ target._fun ] = null;
}
/**计时器*/
private var _timer:Timer;
/**被延迟调用的函数*/
private var _fun:Function;
/**参数*/
private var _params:Array;
/*Constructor*/
public function DelayManager( secs:Number , fun:Function , overwrite:Boolean , params:Array = null )
{
const needOverwrite:Boolean = overwrite && functions [ fun ];
if ( needOverwrite ) {
const manager:DelayManager = functions [ fun ] as DelayManager;
manager._timer.reset();
manager._timer.delay = secs * 1000;
manager._timer.start();
} else {
_timer = new Timer ( secs * 1000 );
_fun = fun;
_params = params;
functions [ _fun ] = this;
_timer.addEventListener( TimerEvent.TIMER , _timerHandler );
_timer.start();
}
}
private function _timerHandler ( event:TimerEvent ):void {
if ( _params ) {
_fun.apply ( null , _params );
} else {
_fun ();
}
destory ( this );
}
}
}
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |