码迷,mamicode.com
首页 > 其他好文 > 详细

Flex 4中 mouseX 与 contentMouseX的区别

时间:2014-12-12 19:22:48      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:flex 4

其实这是个历史问题,Flex 3 以前,所有Flex容器组件都是Container组件的子类,而Container组件重写了UIComponent.contentMouseX、UIComponent.contentMouseY的代码。

以UIComponent.contentMouseX为例

//UIComponent.as
//………………
//在UIComponent中 contentMouseX返回的是UIComponent.mouseX的值
public function get contentMouseX():Number
{
    return mouseX;
}
//而UIComponent.mouseX 是先判断该组件的root是否存在,并拥有一个名为
//“http://www.adobe.com/2006/flex/mx/internal::_mouseX”的属性
//(名为fakeMouseX的QName对象.toString())
//如果存在且拥有,则会获取root. 的值,
//返回 使用该值作为参数用globalToLocal方法计算出的结果
//若root不存在或没有该属性,则返回Flash原生Sprite对象的mouseX

override public function get mouseX():Number
{
    if (!root || root is Stage || root[fakeMouseX] === undefined)
        return super.mouseX;
    return globalToLocal(new Point(root[fakeMouseX], 0)).x;
}

//而在Container中,重写了contentMouseX的代码
//Container.as
//如果Container的内容子面板contentPanel(一个FlexSprite对象,在Container的 mx_internal 
//function createContentPane()方法中创建)存在,则返回该面板的mouseX属性
//否则直接返回UIComponent.contentMouseX
override public function get contentMouseX():Number
{
    if (contentPane)
        return contentPane.mouseX;
    
    return super.contentMouseX;
}
//所以对于Container子类组件而言,如果因内容很多显示了滚动条,则该Container.contentMouseX
//返回的是以整个内容区域左上角(包含了未显示的滚动区域)计算的鼠标位置,
//而Container.mouseX则返回的是以 可见滚动区域左上角计算的鼠标位置

而这个区别在GroupBase子类组件,SkinnableContainer子组件中并不存在,因为spark容器组件都没有重写contentMouseX,返回的是UIComponent.contentMouseX坐标,即Sprite的mouseX值,如果通过Scroller或是其他方式显示了滚动条,contentMouseX和mouseX都是 以整个内容区域左上角(包含了未显示的滚动区域)计算的鼠标位置

本文出自 “博客命名跟变量名一样麻烦” 博客,请务必保留此出处http://cstar.blog.51cto.com/2923639/1589414

Flex 4中 mouseX 与 contentMouseX的区别

标签:flex 4

原文地址:http://cstar.blog.51cto.com/2923639/1589414

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!