//双击事件触发的时候不触发单击事件
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);
} }
}