加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex中区分单击和双击的方法

发布时间:2020-12-15 01:36:44 所属栏目:百科 来源:网络整理
导读:文章分类:JavaEye 最近在写的一个小项目中遇到一个感觉有点不合理的需求,即需要在一个地方同时监听鼠标单击、双击、拖动事件并做出不同的响应,由于AS3事件机制的问题,处理这个需求有点小麻烦,下面分析一下 单击 :MouseEvent.CLICK事件,就单击事件,没

文章分类:JavaEye

最近在写的一个小项目中遇到一个感觉有点不合理的需求,即需要在一个地方同时监听鼠标单击、双击、拖动事件并做出不同的响应,由于AS3事件机制的问题,处理这个需求有点小麻烦,下面分析一下

  • 单击 :MouseEvent.CLICK事件,就单击事件,没啥好说的
  • 双击 :MouseEvent.DOUBLE_CLICK事件,据师兄春哥说AS2里面是没有这个事件的,他都 是自己写双击事件;现在AS3是提供了这样的事件,我只要doubleClickEnabled=true就可以用了,但问题是默认 doubleClick会先监听到一次Click事件,去调用Click的监听函数,这样子就麻烦了
  • 拖动 :拖动其实就三个过程,MOUSE_DOWN,MOUSE_MOVE,MOUSE_UP,但问题是MOUSE_DOWN,MOUSE_UP完了以后Flash又认为这是一次Click事件,就又会去调Click的监听函数,纠结。

解决思路:

  • 区分单击、双击:不直接在单击双击事件里面写相应,而是先就这两个事件分别修改一个布尔值,然后Timer判断,再根据此布尔值判断是调双击的方法还是单击的方法,废话不多说上代码:

?

Xml代码 ?

收藏代码

  1. var? mySprite:Sprite ?=? new ?Sprite();??
  2. var?isDoubleClick:Boolean ?=? false ;//判断是否是双击的标志??
  3. mySprite.addEventListener(MouseEvent.CLICK,?onClick);??
  4. mySprite.addEventListener(MouseEvent.DOUBLE_CLICK,?onDoubleClick);??
  5. private?function?onDoubleClick(event:MouseEvent):void?{??
  6. ????isDoubleClick ?=? true ;??
  7. }??
  8. private?function?onClick(event:MouseEvent):void?{??
  9. ????isDoubleClick ?=? false ;??
  10. ????var?timer:Timer ?=? new ?Timer(260,?1);??
  11. ????timer.start();//也就是说两次单击间隔在260毫秒之内的就被认为是双击??
  12. ????timer.addEventListener(TimerEvent.TIMER,?clickOrDouble);//这边的clickOrDouble也可以写成匿名函数,把mouseEvent传进去??
  13. }??
  14. private?function?clickOrDouble():void?{??
  15. ????if(isDoubleClick){??
  16. ????????doubleClickFunc();//调用双击响应函数??
  17. ????}else{??
  18. ????????clickFunc();//调用单击响应函数??
  19. ????}??
  20. }??
?
  • 区分单击、移动:MOUSE_DOWN和MOUSE_MOVE的时候分别修改一个布尔值,CLICK里面就根据这个布尔值来判断是不是拖动中,思路其实差不多,代码:

?

Xml代码 ?

收藏代码

  1. private?var?isDragging:Boolean;//判断是否在拖动中的标志??
  2. mySprite.addEventListener(MouseEvent.MOUSE_DOWN,?onMouseDown);??
  3. mySprite.addEventListener(MouseEvent.CLICK,?onClick);??
  4. private?function?onMouseDown(event:MouseEvent):void{??
  5. ????isDragging ?=? false ;??
  6. ????//bla?bla?bla~~??
  7. ????mySprite.addEventListener(MouseEvent.MOUSE_MOVE,?onMouseMove);??
  8. ????mySprite.addEventListener(MouseEvent.MOUSE_UP,?onMouseUp);??
  9. }??
  10. private?function?onMouseMove(event:MouseEvent):void?{??
  11. ????isDragging ?=? true ;??
  12. ????//bla?bla?bla~~??
  13. }??
  14. private?function?onClick(event:MouseEvent):void?{??
  15. ????if?(isDragging ?==?false)?{??
  16. ????????//bla?bla?bla~??
  17. ????}??
  18. }?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读