`
shizhi
  • 浏览: 47753 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Canvas不能接收rollOver和roolOut事件的解决方案

    博客分类:
  • Flex
阅读更多

Canvas不能接收rollOver和roolOut事件的解决方案

MouseEvent.MOUSE_WHEEL事件不需要这样做,因为当设置这些事件的时候,flex自动的给canvas设置了setStyle('mouseShield', true) 样式

一个没有任何内容的透明 Canvas 不能触发rollOver和roolOut事件的侦听器函数,比如下面这个程序

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">       
    <mx:Canvas id="canvas" x="10" y="10" width="200" height="200"
        rollOver="trace('in')" rollOut="trace('out')" />        
</mx:Application>

编译后,你把鼠标移上去,会发现没有任何输出。

解决方法:

 1,<mx:Canvas id="canvas" x="10" y="10" width="200" height="200"
        rollOver="trace('in')" rollOut="trace('out')" backgroundAlpha="0" backgroundColor="#ff000"/>

2,<mx:Canvas id="canvas" x="10" y="10" width="200" height="200"
        rollOver="trace('in')" rollOut="trace('out')"
        preinitialize="canvas.setStyle('mouseShield', true);"/>
 

前提是你的 canvas 的 borderSkin 是 mx.skins.halo::HaloBorder.

原理:
没有任何内容的透明Canvas ,鼠标放上去,空无一物,当然不能触发鼠标事件。
所以我们要
1,backgroundAlpha="0" backgroundColor="#ff000"。
或者
2,将canvas的 mouseShield 样式设为 true,容器会自动给自己绘制一个alpha=0,白色的背景 backgroundAlpha="0" backgroundColor="#ffffff"
(可以参考mx.skins.halo::HaloBorder类的drawBackground函数)

为什么MouseEvent.CLICK,MouseEvent.DOUBLE_CLICK,MouseEvent.MOUSE_DOWN,MouseEvent.MOUSE_MOVE,MouseEvent.MOUSE_OVER,MouseEvent.MOUSE_OUT,MouseEvent.MOUSE_UP,
MouseEvent.MOUSE_WHEEL事件不需要这样做?

因为当设置这些事件的时候,flex自动的给canvas设置了setStyle('mouseShield', true) 样式。(可以参考mx.core::Container 类的addEventListener 函数)。

 

http://www.52ria.com/tutorial/flex/2009/0711/21.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics