AS3 判断双击事件

//双击事件触发的时候不触发单击事件
package {
	import com.greensock.TweenLite;

	import flash.display.DisplayObjectContainer;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.utils.getTimer;

	public class Test1 extends Sprite {
		private var _rect:Sprite;

		public function Test1() {
			trace("hello world");

			//            this.stage.addEventListener(MouseEvent.CLICK, __onTraceClick);

			drawRect();
			_rect.addEventListener(MouseEvent.ROLL_OVER, __onOver);
			_rect.addEventListener(MouseEvent.ROLL_OUT, __onOut);
			_rect.addEventListener(MouseEvent.MOUSE_DOWN, __onDown);

		}

		private function __onOver(evt:MouseEvent):void {
			//trace("over");
		}
		private function __onOut(evt:MouseEvent):void {
			//trace("out");
		}

		private var _preDownTime:int = 0;
		private function __onDown(evt:MouseEvent):void {
			trace("down");

			TweenLite.killDelayedCallsTo(doClick);

			_rect.addEventListener(MouseEvent.MOUSE_UP, __onUp);
			_rect.startDrag();

			_preDownTime = getTimer();
		}

		private const UP_INTER:int = 300;
		private var _preUpTime:int = 0;
		private function __onUp(evt:MouseEvent):void {
			trace("up");
			_rect.removeEventListener(MouseEvent.MOUSE_UP, __onUp);
			_rect.stopDrag();

			var now:int = getTimer();
			if((now - _preUpTime) < UP_INTER) {
				trace("----double click");
			} else if((now - _preDownTime) < UP_INTER) {
				TweenLite.delayedCall(0.2, doClick);
			} else {
				trace("drag");
			}
			_preUpTime = now;
		}

		private function doClick():void {
			trace("----click");
		}

		private function __onTraceClick(evt:MouseEvent):void {
			var str:String = "";
			trace(printTrace(evt.target as DisplayObjectContainer));
		}

		private function printTrace(sp:DisplayObjectContainer):String {
			if(null == sp) {
				return "";
			} else {

				return sp.toString() + "/" + printTrace(sp.parent);
			}
		}
		private function drawRect():void {
			var rect:Sprite = new Sprite();

			// red rect, starting at point 50, 50
			rect.graphics.beginFill(0xFF0000);
			rect.graphics.moveTo(50, 50);
			rect.graphics.lineTo(150,50);
			rect.graphics.lineTo(150,150);
			rect.graphics.lineTo(50,150);
			rect.graphics.endFill();
			_rect = rect;
			this.addChild(_rect);
		}

	}
}

  

时间: 2024-12-14 05:48:30

AS3 判断双击事件的相关文章

android判断双击事件(参考android源码,判断时间间隔和范围)

对于android的双击事件的判断,官方是已经给出解决办法的,主要是使用下面几个类或者接口:GestureDetector,OnGestureListener,OnDoubleTapListener,GestureDetector.SimpleOnGestureListener 对于它们的介绍以及用法很多了,就不说明了,大家可以参考下面的博客: http://blog.sina.com.cn/s/blog_77c6324101017hs8.html 需要特殊说明的是OnDoubleTapList

Android实现双击事件的两种方式

Work around的方法是先监听onTouch事件来监听连续点击次数,每次点击都布置一个间隔时间的延时任务,延时任务执行时判断间隔内是否还有点击,如果没有则发布点击次数,重置计数. 实现代码如下: /** * 连续点击事件监听器 可以用作双击事件 * */ public abstract class OnMultiTouchListener implements OnTouchListener { /** * 上次 onTouch 发生的时间 */ private long lastTouc

android实现双击事件暨多击事件详解

最近在多击事件上稍微研究了下,在此做简要分析,供大家吐槽参考 方法一: 将两次点击的时间间隔小于0.5s的默认为双击事件 <span style="font-family:SimSun;font-size:14px;">mBtn1.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getA

cocos2d-x 2.2 study ------------------------ 双击事件(转)

Cocos2d-x处理双击事件的两种方法! 在 Cocos2d-x的开发过程中有些时候也是需要用到双击的事件处理,那么由于在cocos2d-x中没有实现对双击的事件的处理,那么我们就需要自己用代码实现. 下面介绍两种方式实现双击事件的处理. (一)方法一 第一种方法就是利用两次touch之间的时间间隔来判定是单击或者是双击,一般来说,双击,两次touch之间的时间间隔为250ms~300ms(毫秒).所以利用这个条件就可以对双击进行判断处理了. 注意到由于要获取两次touch之间的touch时间

Qt鼠标双击事件mouseDoubleClickEvent(QMouseEvent* event)

重写mouseDoubleClickEvent(QMouseEvent event)* 1.实例:双击窗口时输出"sss" /*widget.h*/ #ifndef WIDGET_H #define WIDGET_H #include<QWidget> #include<QDebug> class Widget : public QWidget { Q_OBJECT public: Widget(QWidget* parent=0); ~Widget(){} p

abap中如何通过双击事件调用事务码

比如,通过普通屏幕,使用定制控制,显示了一个alv表格,表格中列举的信息包括物料编号,物料名称等信息 现在希望双击物料编号,直接调用事务码MM03显示物料信息,用哪个函数呢? 创建过程如下: 一.. 绘制初始屏幕 使用SE80进入,创建一个report 基础的代码 包括: 1.定义(用于存储被显示的数据的)内表 这个内表,需要在后面的代码中被反复赋值,形成最终需要的内容 SELECT *** INTO CORRESPONDING FIELDS OF TABLE ITAB_XXX LOOP AT

怎样使单击事件变为双击事件(50分)

即单击时并不产生单击事件,而双击时产生单击事件,这样不能在双击事件里调用单击事件,因单击事件优先于双击事件. 拦截单击的消息,改发双击的消息 能否举个例子!以DBgridclick()为例 TForm1 = class(TForm) procedure FormClick(Sender: TObject); procedure FormDblClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Priva

[前端][自定义DOM事件]不使用setTimeout实现双击事件或n击事件

使用setTimeout实现双击事件 例如,这样: let div = document.getElementById("div"); doubleClick(div, function (event) { console.log('双击') }) function doubleClick(ele, fn) { // 省略参数合法性的判断 let event = new Event("doubleClick"); // 自定义双击事件(可以使用CustomEvent

unity3D 游戏物体同时绑定单击、双击事件

前言 在unity中我们常用的获取鼠标点击的方法有 在3D场景中,一般用在Update方法中,每一帧调用 void Update(){ if(Input.GetMouseButtonDown(0)){ Debug.log("鼠标左键点击"); } } 在画布场景中,一般用在OnGUI方法中,这个也是一个循环调用的方法 void OnGUI() { Event e = Event.current; if (e.isMouse && (e.clickCount == 2))