flash中的按钮要响应双击事件,我们得自己写代码,之前有很多人都有这方面的研究
曾经在网上搜到过一个DoubleClick类,但是使用不太方便,于是改写了一下,现在就方便多了;
使用方法:定义好mc(或是btn)的onDoubleClick 和onSingleClick,注意单击响应都要写在
onSingleClick里面,不能使用原来的onRelease,然后用DoubleClick.init(mc);处理一下mc就可以了
//-----最简单的用例-----
mc.onDoubleClick = function() {
trace("双击 [ "+this._name+" ]");
};
mc.onSingleClick = function() {
trace("单击 [ "+this._name+" ]");
};
DoubleClick.init(mc);
//-----------------------------
//下面这个是稍微复杂一点的演示,不知道是程序有bug还是我的鼠标问题,有时候会没有响应
TA_out.text = "";
for (var i = 1; i<=6; i++) {
var mc = this["mc"+i];
mc.onDoubleClick = function() {
TA_out.text += "双击 [ "+this._name+" ]\n";
};
mc.onSingleClick = function() {
TA_out.text += "单击 [ "+this._name+" ]\n";
};
DoubleClick.init(mc);
}
//DoubleClick使用单列模式,唯一的公开方法是 public static function init(mc)
class DoubleClick {
private var DELAY_TIME:Number //双击间隔时间
private var target:MovieClip; //双击(或单击)目标
private var intervalID:Number; //intervalID
private var delayTime:Number; //从第一次点击後所经过的时间
private static var instance:DoubleClick; //本class唯一的实例
private function DoubleClick() {
DELAY_TIME=170;
}
private function onClick() {
if (!delayTime) {
delayTime = getTimer();
clearInterval(intervalID);
intervalID = setInterval(this, "run", DELAY_TIME);
} else {
if ((getTimer()-delayTime)<DELAY_TIME) {
target.onDoubleClick();
}
delayTime = null;
}
}
private function run():Void {
if (delayTime) {
target.onSingleClick();
delayTime = null;
clearInterval(intervalID);
}
}
private static function getInstance() {
if (instance == null) {
trace("创建 DoubleClick 实例");
instance = new DoubleClick();
}
return instance;
}
public static function init(mc) {
mc.doubleClickObject = getInstance();
mc.onRelease = function() {
if (this.doubleClickObject.target != this) {
this.doubleClickObject.run();
this.doubleClickObject.target = this;
}
this.doubleClickObject.onClick();
};
}
}
//-------------------------------
有一点感觉不妥的是,init(mc)之后,我们可以通过mc.doubleClickObject.***来访问DoubleClick的
实例中的所有所谓私有的东西,例如我们可以用mc.doubleClickObject.DELAY_TIME=1000;这样一
句代码来改变双击间隔时间,这并不是设计中所期望的............不知道as3.0中会是什么情况,应该......
回复Comments
作者:
{commentrecontent}