as学习笔记(十五)--as3的鼠标事件与对象层次关系
sshong 发表于2008年4月18日 17:09:00 更新于2008年10月26日 08:48:00
  引: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
标签:无分类:As3&Flex阅读:3333
评论
暂无评论
添加评论
您的大名,限长10汉字,20英文(*)
电子信箱(*)
您的网站
正文,限长500汉字,1000英文(*)
验证码(*) 单击刷新验证码
联系我
博客订阅