自定义鼠标双击事件的缺陷及改善

2008-04-02 10:57:53来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


  昨天晚上想写个鼠标双击事件,总感觉以前见过这个代码(最后想起来好象是JS里面的……)按习惯写了个onDbClick,发现居然不变色?!晕了,于是改onDoubleClick、onDouble……等等都不变色,FLASH难道没有定义这个事件?!气愤中,去查帮助,里面果然没有……

  然后就上来搜了闪吧里有关鼠标双击的帖子,一看N多啊,都是自己写函数实现的(再次气愤),但是还是HOLYBOZO的代码是最简洁的,于是拖下来用了。用的时候就发现问题了,只要在延迟以内,我狂点10次就触发了9次事件,而按常理应该是两次一个,就是说假如每两次之间的时间都不超过延迟的话,点10次应该只产生5次事件(我这个道理对不对啊,呵呵),于是着手改算法……

  如下是可能的点击情况(

  代表点击,_代表延迟间隔,___代表超过延迟):

  _

  ___

  _

  ___....

  ___

  _

  ___...

  _

  _

  ___

  _

  ....

  ....

  ……在我漫长的尝试中,我首先想到的是设标志,双击完成一次就置标志,最后未果,只实现了分隔开中间超过延迟时间的两次双击,

  _

  ___

  _

  ,而假如是一直点的话就只触发一次事件

  _

  _

  _

  _

  _

  .....=

  _

  。于是郁闷了一晚上,觉都没睡好,总感觉是能够的,就是没想出来……

  正解:早上过来决定换个方法,一眼就看到lastClicked这个时间变量,于是在代码里加了当完成一次双击则置0,HOHO,成功了……(有点兴奋),下面是代码:

  //var j=0;

  var lastClicked=0;

  MovieClip.prototype.dbClick=function(time){

  if(time==undefined) time=500;

  if((lastClicked-(lastClicked=getTimer()) time>0)){

  //trace("time true");

  lastClicked=0;

  return true;

  }

  return false;

  }

  _root.onMouseDown=function(){

  //trace(j );

  if(dbClick(250)){

  trace("double click");

  }

  }

  

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: Flash制作轮辐旋转遮照效果(无as)

下一篇: Flash游戏制作--记忆游戏