快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

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

昨天晚上想写个鼠标双击事件,总感觉以前见过这个代码(最后想起来好象是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");
}
}
标志位的实在想不出来,绞起来混乱的要命……看来逻辑思维还要加强练习

返回类别: Flash教程
上一教程: Flash制作动画的一些基础知识总结
下一教程: Flash视频教程:路径动画

您可以阅读与"自定义鼠标双击事件的缺陷及改善"相关的教程:
· 用EventDispatcher自定义事件
· 用FLASH制作课件的优势和缺陷
· 用AS画图,自定义多边形及圆形
· FLASH中响应键盘事件的四种方式
· Flash高级知识:用自定义类实现动画控制
    微笑服务 优质保证 索取样品