一.背景
在FLEX中使用Label组件,在触发双击的同时,必然会触发一次单击事件,这样造成的结果是客户体验性不好,所以决定想办法改进。
二.解决办法
1. 在单击事件中,进行单双击类型的判断,在双击事件中,继续处理双击事件
2. 在组件初始化中,加入如下代码
//此延迟时间必须大于双击判断时间,否则执行双击事件时,还是要触发单击事件
Var clickDelayTimer:Timer = new Timer(1000);
clickDelayTimer.addEventListener(TimerEvent.TIMER,delayTime);
3. 单双击类型判断的代码
var time2:Number = new Date().getTime();//第二次点击的时间
var cha:Number = time2-firsttime;//firsttime为第一次点击的时间,起始为0
if(cha<500){//2次点击时间小于500毫秒,则认为为双击
isDoubleClick = true;
CursorManager.removeBusyCursor();
var event2:MouseEvent =
new MouseEvent(MouseEvent.DOUBLE_CLICK,false,false);
this.dispatchEvent(event2);//触发本组件的双击事件
}else{//为单击事件
firsttime = time2;//当前时间作为第一次点击的时间
CursorManager.setBusyCursor();
clickDelayTimer.start();//启动timer,执行单击事件的逻辑
}
三.总结
由以上解决问题的过程中可以看到,timer组件的延迟执行,是解决问题的核心点,正是由于其这个机制,使得此问题得以顺利解决
四.Timer组件的介绍
目前实际应用中,用到的地方
A. 当前台程序需要延迟一段时间
B. 代替大数据量的For循环,可以提高页面的客户体验
同时,灵活运用此组件,可以解决很多其他问题。此组件若使用不当,会造成内存泄露,因此使用时需注意,不再需要此 timer实例时,一定将其关闭。(另附内存管理文章一篇,见附件)