as3完美解决单击事件、双击事件问题

转载自:http://hi.baidu.com/easyobj/item/7ea1470068ed3e1acc34eae5

在做视频播放器时 有事需要双击播放界面全屏,如果用自带的MouseEvent.DOUBLE_CLICK会触发单击事件(“暂停/播放”)

下面给出了j几种解决方案 供大家参考

------------------------第一种------------------------------------------

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 ) );

}

}

}

-------------------------------------------------------------------以上的做法有个弊端,就是会导致单击延时.
高手推荐做法
只加CLICK的侦听,然后通过记时然后分辨单击和双击
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值