解决flex click 和 double click的问题

来源:互联网 发布:潜意识的力量 知乎 编辑:程序博客网 时间:2024/04/28 11:07

//Copyright © 2008. Http://L4cd.Net All Rights Reserved.
package net.L4cd
{
   
    import flash.display.*;
    import flash.events.*;
    import flash.utils.*;
   
   
   
    /**
     * 自定义双击事件类
     *
     * @author L4cd.Net
     * @playerversion Flash player 9
     * @langversion 3.0
     * @version 2008-10-22 22:53
     */
    public class iDoubleClick
    {
        static public var list:Array;
        public function iDoubleClick()
        {
           
        }
       
        /**
         * 取消自定义双击事件.
         *
         * @param    target 目标
         */
        static public function disable(target:DisplayObject):void
        {
            if (!list) return;
            if (!list[target]) return;
            delete list[target];
            target.removeEventListener(MouseEvent.CLICK, l4cd_click);
        }
       
        /**
         * 启动自定义事件
         *
         * @param    target 目标
         * @param    delay 判断为双击事件的延时,默认值为200毫秒
         */
        static public function enable(target:DisplayObject,delay:uint = 200):void
        {
            if (!list) list = [];
            target.addEventListener(MouseEvent.CLICK, l4cd_click, false, 10, true);
            var obj:Object = {}
            obj.l4cd_last_click = 0;
            obj.l4cd_delay = delay;
            obj.l4cd_timer = 0;
            list[target] = obj;
        }
        static private function l4cd_click(e:MouseEvent):void
        {
            var target:Object = list[e.currentTarget];
            if(target.l4cd_timer == -1){
                target.l4cd_timer = 0
                return;
            }
            if (getTimer() - target.l4cd_last_click < target.l4cd_delay)
            {
                clearTimeout(target.l4cd_timer);
                target.l4cd_timer = 0;
                target.l4cd_last_click = 0;
                e.currentTarget.dispatchEvent(new MouseEvent(MouseEvent.DOUBLE_CLICK,e.bubbles,e.cancelable,e.localX,e.localY,e.relatedObject,e.ctrlKey,e.altKey,e.shiftKey,e.buttonDown,e.delta))
            }else
            {
                clearTimeout(target.l4cd_timer);
                target.l4cd_timer = setTimeout(l4cd_click_event, target.l4cd_delay + 5, e.currentTarget as DisplayObject, e);
                target.l4cd_last_click = getTimer();
            }
            e.stopImmediatePropagation();
        }
        static private function l4cd_click_event(currentTarget:DisplayObject, event:Event):void
        {
            var target:Object = list[currentTarget];
            target.l4cd_timer = -1;
            currentTarget.dispatchEvent(event);
        }
    }
   
}

 

iDoubleClick.enable(Member(hashMember[k]).image,200);