DoubleClick_改写双击类

      Flash进修 2007-4-29 10:50

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中会是什么情况,应该......

标签集:TAGS:flash class ActionScript
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}