解决单、双击事件响应函数冲突问题

//AS代码改变鼠标指针样

Mouse.cursor= "hand" //手掌型样式。
Mouse.cursor= "ibeam" ; //文本选择型样式。
Mouse.cursor= "button" ; //按钮手指型样式。
Mouse.cursor= "auto" ; //默认样式。
Mouse.cursor= "arrow" ; //箭头样式。
经常编程的人士肯定会遇到一个问题,就是同时使用AS3中自带的MOUSE.CLICK和MOUSE.DOUBLE_CLICK会产生响应函数的冲突,如双击时,单击和双击的响应函数都会执行。以下代码可以较为完美地解决此问题。
 
【方法一】

 

import flash.events.MouseEvent;

import flash.events.TimerEvent;

var doubleClick:Boolean = false;

 

stage.addEventListener(MouseEvent.CLICK, mClick);

 function mClick(e:MouseEvent):void

{

if (doubleClick)

    {

doubleClick = false;

return;

    }

    

    doubleClick = true;

    var timer:Timer = new Timer(260, 1);

    timer.addEventListener(TimerEvent.TIMER, onTimer);

    timer.start();

    

    function onTimer(e:TimerEvent):void

    {

if(doubleClick){

trace("在这里处理单击事件")

} else {

trace("在这里处理双击事件")

}

timer.removeEventListener(TimerEvent.TIMER, onTimer);

        doubleClick = false;

    }

}

【方法二】

mc.doubleClickEnabled=true

mc.addEventListener(MouseEvent.CLICK,chick)

mc.addEventListener(MouseEvent.DOUBLE_CLICK,double)

var sta=false

function double(e){

 sta=true

}

function chick(e){

 sta=false

 var time=new Timer(260,1)

 time.start()

 time.addEventListener(TimerEvent.TIMER,func)

}

function func(e){

 if(sta){

  trace("双击")

 }else{

  trace("单击")

 }

}

【方法三】

import flash.display.Sprite;

import flash.events.*;

import flash.utils.Timer;

 

public class MyButton extends Sprite

{

public var double:Boolean;

 

public function MyButton() {

    super();

    init();

}

 

public function init():void {

     addEventListener( MouseEvent.CLICK , onClickHandler );

     addEventListener( MouseEvent.DOUBLE_CLICK , onDoubleClickHandler );

}

 

public function onClickHandler( e:MouseEvent ):void {

double = false;

var timer:Timer = new Timer(260,1);

timer.addEventListener( TimerEvent.TIMER , checkClick );

timer.start();

}

 

public function onDoubleClickHandler( e:MouseEvent ):void {

    double = true;

}

 

public function checkClick( e:TimerEvent ):void {

if( double ){

    //监听这两个自定义事件即可

   dispatchEvent( new Event( "mouseDoubleClick" , true ) );

}else{

    dispatchEvent( new Event( "mouseSingleClick" , true ) );

}

}

}

转载于:https://www.cnblogs.com/sunmmbk/archive/2012/11/07/2763606.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值