Flash AS3事件传播

问题描述

| 我想知道您是否可以提供一些我认为相对简单的功能,但令人沮丧的是! 我有一个影片剪辑列表,每个剪辑包含一个实例名称为Mbtn的按钮。我希望仅当鼠标悬停在父剪辑上时才显示该按钮。该结构基本上是一个称为pcs的父剪辑,它包含5个子剪辑(如下所示),每个子剪辑都包含一个实例名称为mBtn的按钮。这是我的代码-
hr_pc.mBtn.visible=false;
m_pc.mBtn.visible=false;
me_pc.mBtn.visible=false;
d_pc.mBtn.visible=false;
di_pc.mBtn.visible=false;




pcs.addEventListener(MouseEvent.ROLL_OVER,mOver);
pcs.addEventListener(MouseEvent.ROLL_OUT,mOut);

function mOver(evt:MouseEvent):void
{
var overNow = evt.currentTarget.name;
overNow.mBtn.visible=true;


}
function mOut(evt:MouseEvent):void
{
var overNot = evt.currentTarget.name;
overNot.mBtn.visible=false;
} 
我敢肯定有更好的方法可以完成此操作-非常感谢收到任何建议! 谢谢 保罗     

解决方法

        
evt.currentTarget.name
表示,现在,您定位的是容器对象(
pcs
),而不是内容(
hr_pc,m_pc
等)。这是
evt.target
evt.currentTarget
之间的主要区别。如果您跟踪currentTarget名称,则每个预期目标的名称都将相同。 因此,要进行纠正,您当然可以使用
evt.target.name
但是,如果将鼠标悬停在按钮上,则可能会遇到问题,因为目标将不再是按钮的直接父对象(而是按钮本身),并且该按钮可能会再次触发trigger7ѭ。 我可能会朝着另一个方向发展:编写一个包含按钮及其自己的侦听器的类。如果存在很多共享行为,那么这将是一个不错的计划(但是根据您的需要,可能没有)。 所以,是的,请阅读currentTarget与target