Flex 4中 mouseX 与 contentMouseX的区别

其实这是个历史问题,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都是 以整个内容区域左上角(包含了未显示的滚动区域)计算的鼠标位置

时间: 2024-10-23 08:37:20

Flex 4中 mouseX 与 contentMouseX的区别的相关文章

flex 布局中 align-content 和 align-items 的区别

刚接触时,感觉 align-items 就是 align-content 的强化版.一个支持单行,同时支持多行:另一个只支持多行.但是并不符合常理,对比之后发现还是有些没有被描述清楚的差异. 定义还不知道的,出门左转 MDN,随便浪. 此布局值为 flex-end 多行容器之:align-items 以每一行为单位,行下对齐 多行容器之:align-content 以整个容器为单位,容器下对齐 参考:萤火虫塔莉 原文地址:https://www.cnblogs.com/megamouthRen/

flex布局中 align-items 和 align-conten t的区别

参考资料:http://stackoverflow.com/questions/31250174/css-flexbox-difference-between-align-items-and-align-content 看了很多翻译的技术文档,这一块都讲得模糊不清,看到stackoverflow上有人提问后的回答觉得十分清晰,特来分享,有不当之处欢迎指正. align-items The align-items property applies to all flex containers, a

【翻译】JAVA中抽象类和接口的区别

不知道有没有人翻译过了,这篇是挺简单的,权当复习一遍内容吧. 很多常见的面试问题如"抽象类和接口有什么区别","你在什么时候用抽象类什么时候用接口".所以在这篇文章里面,我们会讨论一下这个话题. 在开始讨论它们的区别之前,我们先看看它们的介绍. Abstract class 抽象类 抽象类被用来抽象出子类的共同特征.它是不能被实例化的,它只能被子类继承作为超类使用.抽象类被用作它的子类下的层次结构创建模板(Abstract classes are used to c

lua中的pairs和ipairs区别

pairs Returns three values: the next function, the table t, and nil, so that the construction for k,v in pairs(t) do body end will iterate over all key–value pairs of table t. See function next for the caveats of modifying the table during its traver

浅谈HTTP中Get与Post的区别_转

可参考:HTTP请求中POST与GET的区别 Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作.到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息. 1.根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的

python类中super()和__init__()的区别

本文和大家分享的主要是python开发中super()和__init__()的区别,希望通过本文的分享,对初学者学习这部分内容有所帮助. 1.单继承时super()和__init__()实现的功能是类似的 class Base(object): def __init__(self): print 'Base create' class childA(Base): def __init__(self): print 'creat A ', Base.__init__(self) class chi

PHP中this,self,parent的区别

{一}PHP中this,self,parent的区别之一this篇 面向对象编程(OOP,Object OrientedProgramming)现已经成为编程人员的一项基本技能.利用OOP的思想进行PHP的高级编程,对于提高PHP编程能力和规划web开发构架都是很有意义的. PHP5经过重写后,对OOP的支持额有了很大的飞跃,成为了具备了大部分面向对象语言的特性的语言,比PHP4有了很多的面向对象的特性.这里我主要谈的是this,self,parent 三个关键字之间的区别.从字面上来理解,分别

flex布局中flex-basis|flex-grow|flex-shrink

flex布局中flex-basis|flex-grow|flex-shrink flex-grow.flex-shrink.flex-basis这三个属性的作用是:在flex布局中,父元素在不同宽度下,子元素是如何分配父元素的空间的. 其中,这三个属性都是在子元素上设置的.注:下面讲的父元素,指以flex布局的元素(display:flex). flex-basis 该属性来设置该元素的宽度.当然,width也可以用来设置元素宽度.如果元素上同时设置了width和flex-basis,那么fle

【转载】C#中[],List,Array,ArrayList的区别及应用

本篇文章主要是对C#中[],List,Array,ArrayList的区别及应用进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 [] 是针对特定类型.固定长度的. List 是针对特定类型.任意长度的. Array 是针对任意类型.固定长度的. ArrayList 是针对任意类型.任意长度的. Array 和 ArrayList 是通过存储 object 实现任意类型的,所以使用时要转换.