先说明一下,我并不会把所有的内容都写出来,只列我认为有必要讲解一下的内容。如果要了解全部内容,请参看Flash自带的帮助文件。该系列文章都是按照这个思路写的。

先说一个本人觉得很实用的通用方法:toString()。基本上所有的事件都带有这个方法,不肯定的时候就trace(event.toString())看一下,会发现内容比帮助文档还要全。囧一个。
下面进入正题,今天讲的是MouseEvent(鼠标事件)。
一、MOUSE_OVER、MOUSE_OUT和ROLL_OVER、ROLL_OUT的区别是什么?
唯一的区别就是:MOUSE_OVER、MOUSE_OUT采用的是冒泡机制;而ROLL_OVER、ROLL_OUT采用的是非冒泡机制(关于冒泡机制的讲解请详细看我上一篇文章)。所以如果你非常习惯AS2编程,可以使用ROLL_OVER、ROLL_OUT,和原来的没什么区别。但我建议你还是习惯冒泡机制,毕竟这个是AS3的指导方向。
同时,MouseEvent的事件中,也只有ROLL_OVER、ROLL_OUT这两个采取的还是非冒泡机制。
下面我给出一个比较区别的例子,但不做很具体的说明了:

如图所示,整个图形是一个MC,实例名为t1。里面的粉红色框为t1内的一个MC,实例名为t2。
(1) 在第一帧写入代码,给两个MC都增加侦听如下:
function p1(event:MouseEvent):void
{
trace("t1");
}
t1.addEventListener(MouseEvent.ROLL_OUT, p1);
function p2(event:MouseEvent):void
{
trace("t2");
}
t1.t2.addEventListener(MouseEvent.ROLL_OUT, p2);
编译该段代码,当鼠标从最左边沿中间移动,最终从右边移出。屏幕输出:
t2
t1
(2)代码还是上面,仅仅是把MouseEvent.ROLL_OUT修改为MouseEvent.MOUSE_OUT,编译后同样操作,屏幕输出:
t1
t2
t1
t1
说明ROLL_OUT采取的是非冒泡机制,而MOUSE_OUT采取的是冒泡机制。
二、令人困惑的DOUBLE_CLICK:鼠标双击动作
这个动作在AS2.0是没有的,属于AS3.0新加的事件。但是在使用的过程中,却有不少的麻烦问题,让我们一步步分析:
(1)  默认是关闭的,必须手动打开。
我们在舞台上创建一个MC,实例名为t1,在第一帧写入代码如下:
function p1(event:MouseEvent):void
{
trace("t1");
}
t1.addEventListener(MouseEvent.DOUBLE_CLICK, p1);
运行后,发现无效。为什么呢?因为t1没有打开支持鼠标双击,需要在第一行添加代码如下:  t1.doubleClickEnabled = true;现在再运行,可以了吧?
但这个用法和大多的事件是很不相同的。
(2)  我们在t1内再创建一个MC,实例名为t2,然后再运行上述代码。
问题出现了,在新创建的MC区域,DOUBLE_CLICK事件不响应了。
为什么会发生这样的事情呢?难道因为新创建的t2,doubleClickEnabled为false,所以t1的双击冒泡事件受到t2的影响,冒不出来了吗?...囧
为证明并解决这个问题,我在第二行写入代码如下:
t1.t2.doubleClickEnabled = true;
运行后,果然,问题排除。
可有人要问了,那如果我的MC里面包含了许多子MC怎么办?难道要一个个打开?
那倒也不用那么麻烦,加入下面的代码即可:
t1.mouseChildren = false;  //t1的子项不支持鼠标动作
但这个给人的感觉就像是打一个补丁...
(3) 诡异的冒泡事件
我们把代码稍稍修改下,如下所示:
t1.t2.doubleClickEnabled = true;
trace(t1.doubleClickEnabled)
function p1(event:MouseEvent):void
{
trace("t1");
}
t1.addEventListener(MouseEvent.DOUBLE_CLICK, p1);
function p2(event:MouseEvent):void
{
trace("t2");
}
t1.t2.addEventListener(MouseEvent.DOUBLE_CLICK, p2);
运行后,第二行的trace返回的结果是false,说明t1的双击属性没有打开。
然后我们在t2区域上方双击鼠标,灵异事件发生了!下面的2个函数均被触发了!
依次返回t2,t1。
这个究竟是怎么回事呢?我只好从说明上找根源,然后看到这么一段官方说明:“要使doubleClick 事件发生,它必在以下一系列事件后面:mouseDown、mouseUp、click、mouseDown、mouseUp。 所有这些事件必须共享与 doubleClick 事件相同的目标。”
难道说,是因为DOUBLE_CLICK是由那5个事件组成,而打开t1.t2.doubleClickEnabled,相当于把t2所在区域的限制打开,导致处于该区域范围的t1也无效了吗?
总之,感觉AS3的鼠标双击事件,只是为了解决AS2没有该事件而做的一个半成品,并不能真正意义上称其为一个独立的事件。
以上!

转载于:https://blog.51cto.com/windtoto/372515

常用事件方法及技巧(二) -- MouseEvent(鼠标事件)相关推荐

  1. MouseEvent鼠标事件对象

    MouseEvent鼠标事件对象 <!DOCTYPE html> <html lang="en"><head><meta charset= ...

  2. vue判断是否双击_vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作...

    Vue 事件处理方法 可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码. v-on:click 单击事件 + + - - v-on:dblclick 双击事件 ...

  3. JavaSwing | MouseEvent 鼠标事件

    目录 | contents 一.相关接口 与鼠标相关的顶层接口有两个:MouseListener和MouseMotionListener. //MouseListener接口内的方法: public ...

  4. 常用的一些 CSS 技巧二 — 选择器(伪类与伪元素)

    你可以看看其他常用的 CSS 技巧: 常用的一些 CSS 技巧一 常用的一些 CSS 技巧三 CSS 重置盒模型 *, *::before, *::after {box-sizing: border- ...

  5. MATLAB作图方法与技巧(二)

    作为MATLAB作图方法与技巧(一)的补充 1.绘制二维散点图 ① scatter函数 scatter(x,y,s,c)函数绘制向量x和y的散点图,其中s代表点的大小,c代表点的形状,s和c缺省时为默 ...

  6. 老土但有效的刷百度空间人气不被封的方法(C#实现操纵鼠标事件,单击、移动、滚轮)...

    今天在网上看到有人问C#如何实现鼠标左键自动点击并自己设定点击间隔,我也感到很好奇,查了一下发现很简单,只需利用WIN32 API的两个函数SetCursorPos和mouse_event操作鼠标: ...

  7. jQuery 事件绑定方法(bind hover toggle live.... )、删除事件方法(unbind, die)及 事件对象

    事件绑定方法: 1.<type>(function) $("button").click(function(){... }); 2.bind(map) $(" ...

  8. python鼠标事件 详解_Python selenium键盘鼠标事件实现过程详解

    引言 ----在实际的web测试工作中,需要配合键盘按键来操作,webdriver的 keys()类提供键盘上所有按键的操作,还可以模拟组合键Ctrl+a,Ctrl+v等. 举例: #cording= ...

  9. java 中鼠标事件_[Java教程]js中鼠标事件总结

    [Java教程]js中鼠标事件总结 0 2017-07-11 00:00:19 js中鼠标事件主要有onclick,onmousedown,onmouseup,oncontextmenu,ondblc ...

最新文章

  1. 一份邀请函引发的中国芯片新猜想
  2. datetime模块日期转换和列表sorted排序
  3. std::tostring_枚举:如何正确使用name()和toString()方法
  4. matplotlib.pyplot.bar()条形图
  5. 【洛谷 P1070】道路游戏 (DP)
  6. 《算法图解》之散列表
  7. atitit.产品console 日志的aticonsole 方案处理总结
  8. SQL Server系统表sysobjects介绍
  9. hadoop中HDFS命令遇到的问题
  10. 吉林大学计算机科学与技术学院刘菁,吉林大学2011-2012学年奖学金获奖名单
  11. Hbase最新官方文档中文翻译与注解1-10|hbase简介与配置信息等
  12. MATLAB 多元线性回归(regress)
  13. 关于IT行业的职业规划
  14. 软件设计师:计算机硬件基础
  15. 数字化精准会员营销 助消费品连锁企业提升转化
  16. wasm和javascript
  17. CnOpenData短视频播主排名数据
  18. python的for语句怎么写_python:for循环
  19. 添加光效:颜色减淡法
  20. 是计算机病毒在危害你

热门文章

  1. python中的切片和join的妙用
  2. Qt中创建excel文件
  3. Oracle四舍五入,向上取整,向下取整
  4. 偶然发现了获取有ID的dom的一种方法
  5. MySql 修改外键 支持级联删除
  6. coreData使用
  7. 扩展ToolBarManager、ListView和Grid控件以实现气球式的ToolTip
  8. [笔记]Linux内核学习之旅--软中断与tasklet
  9. 使用Sencha Designer来快速开发web用户界面 -- 初识Designer
  10. 读CopyOnWriteArrayList有感