引:as3永远只会触发对象层次index最高的显示对象的鼠标事件。即A元件在B之上,则B的鼠标事件将完全被屏蔽。
这两天在搞flv播放器,全屏播放时,自动下移消失控制栏,移到控制栏位置自动上移出现。
于是在控制栏位置做一个全透明的大小与控制栏一模一样大的mask,index置于其后,如果置于其前,控制栏的所有鼠标动作均无法执行。
在mask上增加动作mouseover鼠标移入和mouseout鼠标移出动作。初衷是鼠标移入时增加一个y向德tween,让控制栏从底部移上来;而鼠标移出时增加另一个y向tween,让控制栏从底部移出去。
结果加完这个动作之后,发现,鼠标移到mask上,控制栏在那里反复移上移下,如抽风般。苦思不得其解!
今天早上,才想通。
因为mask在控制栏之下,当鼠标移到mask上,调用mouseover动作,控制栏将移入,将遮蔽mask,而mask上的鼠标将自动移出,调用mouseout动作,控制栏将移出,不再遮蔽mask,鼠标回到mask上,调用mouseover动作,循环,于是开始抽风。
这是一个flash演示,将鼠标移到中间固定的方块上(在最底层),不动,等运动方块过来时,看看文本框的状态变化。
解决方案是,当控制栏移出时,保证mask没有movein动作,当控制栏移入时,保证mask没有moveout动作。即在移入、移出对应动作前清空所有鼠标移入移出动作。
因为只有两种初始状态,一种是控制栏在mask上面完全覆盖;一种是控制栏移出,mask完全暴露。
第一种状态需要对控制栏添加鼠标移出侦听(mouseout还是rollout,一会再讲);
第二种状态需要对mask添加鼠标移入侦听(mouseover还是rollover,一会再讲);
综上,在tween的结束侦听动作中增加反向侦听动作。移出结束时,对mask增加鼠标移入侦听;移入结束时,对控制栏增加鼠标移出侦听。
下一个问题就是,mouseout还是rollout了。这个问题是由对控制栏上增加mouseout动作引起的,结果发现总是出错,改为rollout,结果正确。
原因见下一篇日志as学习笔记(十六)--as3的mouseover与rollover
as学习笔记(十五)--as3的鼠标事件与对象层次关系
发表于2008年4月18日 17:09:00 更新于2008年10月26日 08:48:00
评论
暂无评论添加评论
分类
琐碎文字 As3&Flex RIA UG English CodingArt C++ PHP Webserver E音乐盒 Unity3d C# JS&Html5 Tools mobile golang 最近发表
- golang学习之函数/方法/接口(2022年1月6日 17:50:24)
- golang学习之零值(2022年1月6日 16:38:10)
- hello, 2018(2018年1月15日 22:47:25)
- 字体类型名词解释(2015年1月18日 11:29:14)
- 获取mysql表注释以及列注释(2014年11月13日 15:56:32)
- php连接ms sql数据库的一些问题(2014年9月15日 20:32:14)
- virtualbox虚拟网络:NAT&bridge桥接网络(2014年8月25日 22:51:35)
- php图片加水印(2014年8月15日 22:50:42)
- windows查看端口占用情况(2014年7月31日 21:19:30)
- android安卓activity生命周期(2014年7月12日 10:31:47)
最近回复