我想跟踪用户鼠标位置,可以是相对于父容器或相对于容器中其他子组件。
解决办法
使用Stage 和MouseEvent 类的本地位置属性以及所有容器都继承自UIComponent 的mouseX和mouseY 属性。
讨论
MouseEvent 类有四个属性可用于确定鼠标位置。localX 和localY 属性提供与抛出mouse 事件相关的组件位置,而stageX 和stageY 提供与Stage 相关的位置。
下面的例子,如果鼠标移动到LinkButton 组件上,localX 和localY 属性将反应出鼠标在LinkButton 组件上的位置。如果鼠标没有在LinkButton 上,这两个属性就是指鼠标在VBox上的位置:
Code View:
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
mouseMove="traceMousePosition(event)">
<mx:LinkButton label="MyButton"/>
</mx:VBox>
要检测某个组件上的鼠标位置(无论鼠标是否在其之上),使用DisplayObject 的mouseX 和mouseY 位置,它将返回相对于容器或组件的0,0坐标的位置。最后,Container 类定义了contentMouseX 和contentMouseY 位置,描述鼠标相对于整个容器内容的位置。下面的例子返回与两个被添加到HBox 的Panel 组件相关的鼠标位置,而不是与HBox 左上角相关:
Code View:
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="500"
mouseMove="trace(this.contentMouseX+' : '+this.contentMouseY);
height="300"">
<mx:Panel width="400">
<mx:Label text="Center" horizontalCenter="200"/>
</mx:Panel>
<mx:Panel width="400">
<mx:Label text="Center" horizontalCenter="200"/>
</mx:Panel>
</mx:HBox>
因为HBox 两个子组件的和为812像素,当你滚动鼠标到HBox 右边时,你会发现x 值已经超出HBox 的设置值。容器定义了异恶contentPane 属性,它是容纳添加进来的所有子组件的私有的DisplayObject。如果子组件的高或宽超出容器自身设置的高或宽,那超出部分将被隐藏。而contentMouseX 和contentMouseY 属性就是测量鼠标在保护内容DisplayObject 上的位置。下面是完整代码:
Code View:
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="300"
height="500" paddingTop="10" paddingLeft="10" verticalGap="15"
mouseMove="traceMousePosition(event)">
<mx:Script>
<![CDATA[
private function
traceMousePosition(event:MouseEvent):void
{
trace(" MouseEvent local position "+event.localX+"
"+event.localY);
trace(" MousePosition stage position
"+event.stageX+" "+event.stageY);
trace(" MouseEvent position from w/in component
"+this.mouseX+" "+this.mouseY);
trace(" Content Mouse Position
"+this.contentMouseX+" "+this.contentMouseY);
}
]]>
</mx:Script>
<mx:Image source="@Embed('../../assets/image.png')"/>
<mx:Image source="@Embed('../../assets/image.png')"/>
<mx:Image source="@Embed('../../assets/image.png')"/>
<mx:Image source="@Embed('../../assets/image.png')"/>
</mx:VBox>
当鼠标移到VBox 组件时函数将被调用,输出mouseX 和mouseY 值。
分享到:
相关推荐
在创建矩形选择组件时,我们通常会创建一个Sprite实例,并监听鼠标的mousedown、mousemove和mouseup事件来跟踪用户的绘制动作。 1. **mousedown事件**:当用户按下鼠标按钮时,我们记录下鼠标的起始位置(x1, y1)...
当用户按下鼠标并开始移动时,我们可以通过计算鼠标相对于菜单的位置来改变菜单的坐标。在`mouseup`事件中,我们可以添加逻辑来判断是否应该自动收回菜单,例如,如果菜单距离屏幕边缘一定距离,则将其隐藏。 此外...
在`ball.as`中,我们可能会看到与鼠标位置相关的计算,以及更新球体位置和动画效果的代码。 描述中的“改写”暗示原有的代码可能有优化的空间或者存在一些问题,因此我们需要对原有的逻辑进行分析和重构。改写可能...
这需要对坐标系统有深入理解,并使用Math类中的sin()和cos()函数来计算发射轨迹。同时,碰撞检测通常采用矩形碰撞或精确像素碰撞,ActionScript 3提供了相应的API支持。 接着是泡泡匹配和消除逻辑。当发射的泡泡与...
2. **坐标系统**:理解应用中的坐标系统至关重要,因为我们需要根据鼠标的当前位置来更新被拖动控件的位置。在Web开发中,这可能是基于HTML文档的坐标系统;在桌面应用中,可能基于窗口坐标系统。开发者需要将鼠标的...
以不同的坐标系统跟踪鼠标位置 3.4 节在容器中动态添加和移除子组件 3.5 节对容器使用基于约束的布局 3.6 节在容器内为子组件设置最大、最小尺寸 3.7 节为容器指定行和列的约束 3.8 节使用约束条件为文本创建排版...
使用FlexBulider如何跟踪程序? - **答案**:使用Flex Builder的调试工具,可以在代码中设置断点,利用调试控制台查看变量状态等。 #### 25. 请问Flexbulider3可以创建几种不同的项目?Flex Builder4可以创建几种...
2.7.2鼠标位置 2.7.3键盘事件 2.7.4键盘代码 2.8小结 第3章动画中的三角学 3.1什么是三角学 3.2角 3.2.1弧度和度 3.2.2Flash坐标系统 3.2.3三角形的边 3.3三角函数 3.3.1正弦 3.3.2余弦 3 3.3.3正切 3.3.4反正弦和反...
1.3 编写代码的位置:讨论了在Flash或Flex环境中编写ActionScript代码的不同位置,如时间轴、文档类等。 1.4 跟踪信息:讲解如何使用trace()函数输出调试信息,以便于开发过程中的问题排查。 1.5 处理事件:介绍了...