AS3中可以直接添加双击事件了.
interactiveObjectInstance
.
doubleClickEnabled
=
true
;
interactiveObjectInstance . addEventListener ( MouseEvent . DOUBLE_CLICK , onDoubleClick ) ;
interactiveObjectInstance . addEventListener ( MouseEvent . DOUBLE_CLICK , onDoubleClick ) ;
但是,当click事件和double click事件同时使用时,click事件会屏蔽掉double click事件.所以如果希望使用单击和双击执行不同的操作时,直接把这两种事件添加给interactiveObject实例是不行的.
在FLEXing My Muscle 看到一种方法.单击时,设置一个interval,如果在一定的时间差内没有再次单击,刚认为是click事件,反之刚认为是双击事件.然后清除这个interval.
package {
import flash.display.Sprite;
import flash.net.navigateToURL;
import flash.net.URLRequest;
import flash.events.MouseEvent;
import flash.utils.clearInterval;
import flash.utils.setInterval;
import flash.display.Graphics;
import flash.text.TextField;
[SWF(width="400",height="300", frameRate="12")]
public class BaseCode extends Sprite
{
private var intervalID:Number = 0 ;
private var timeOffset:Number = 300 ;
private var infoTxt:TextField ;
public function BaseCode()
{
var bmp:Sprite = new Sprite();
drawRectangle(bmp.graphics);
bmp.addEventListener(MouseEvent.CLICK,onClick);
bmp.doubleClickEnabled = true;
bmp.addEventListener(MouseEvent.DOUBLE_CLICK,onDoubleClick);
bmp.x = (stage.stageWidth - bmp.width)/2 ;
bmp.y = (stage.stageHeight - bmp.height)/2 ;
addChild(bmp);
infoTxt = new TextField();
infoTxt.x = bmp.x ;
infoTxt.y = bmp.y +20 ;
addChild(infoTxt);
}
private function onClick(evt:MouseEvent):void
{
clearInterval(intervalID);
intervalID = setInterval(doClick,timeOffset);
}
private function doClick():void
{
navigateToURL(new URLRequest("http://www.adobe.com"));
infoTxt.text = "Go to Adobe Site";
clearInterval(intervalID);
}
private function onDoubleClick(evt:MouseEvent):void
{
clearInterval(intervalID);
infoTxt.text = "Go to myBlog";
navigateToURL(new URLRequest("http://flashcoder.cn/blog"));
}
private function drawRectangle(target:Graphics):void
{
target.beginFill(0xFF0000,1);
target.drawRect(0,0,100,20);
target.endFill();
}
}
}
import flash.display.Sprite;
import flash.net.navigateToURL;
import flash.net.URLRequest;
import flash.events.MouseEvent;
import flash.utils.clearInterval;
import flash.utils.setInterval;
import flash.display.Graphics;
import flash.text.TextField;
[SWF(width="400",height="300", frameRate="12")]
public class BaseCode extends Sprite
{
private var intervalID:Number = 0 ;
private var timeOffset:Number = 300 ;
private var infoTxt:TextField ;
public function BaseCode()
{
var bmp:Sprite = new Sprite();
drawRectangle(bmp.graphics);
bmp.addEventListener(MouseEvent.CLICK,onClick);
bmp.doubleClickEnabled = true;
bmp.addEventListener(MouseEvent.DOUBLE_CLICK,onDoubleClick);
bmp.x = (stage.stageWidth - bmp.width)/2 ;
bmp.y = (stage.stageHeight - bmp.height)/2 ;
addChild(bmp);
infoTxt = new TextField();
infoTxt.x = bmp.x ;
infoTxt.y = bmp.y +20 ;
addChild(infoTxt);
}
private function onClick(evt:MouseEvent):void
{
clearInterval(intervalID);
intervalID = setInterval(doClick,timeOffset);
}
private function doClick():void
{
navigateToURL(new URLRequest("http://www.adobe.com"));
infoTxt.text = "Go to Adobe Site";
clearInterval(intervalID);
}
private function onDoubleClick(evt:MouseEvent):void
{
clearInterval(intervalID);
infoTxt.text = "Go to myBlog";
navigateToURL(new URLRequest("http://flashcoder.cn/blog"));
}
private function drawRectangle(target:Graphics):void
{
target.beginFill(0xFF0000,1);
target.drawRect(0,0,100,20);
target.endFill();
}
}
}