Flash AS3事件传播

时间:2011-06-21 23:29:20

标签: flash actionscript-3

我想知道你是否可以帮助我想象的相对简单的东西 - 但令人惊讶的是令人沮丧!

我有一个影片剪辑列表,每个影片剪辑都包含一个实例名称为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;
} 

我确信有更好的方法可以做到这一点 - 非常感谢任何建议!

由于 保罗

1 个答案:

答案 0 :(得分:1)

evt.currentTarget.name

表示您现在正在定位容器对象(pcs),而不是内容(hr_pc, m_pc等)。这是evt.targetevt.currentTarget之间的主要区别。如果您追踪currentTarget名称,则每个预期目标的名称都相同。 所以,为了纠正,你当然可以用

来完成这项工作
evt.target.name

但是,如果将鼠标悬停在按钮上,则可能会出现问题,因为目标将不再是按钮直接父项(它将是按钮本身),并且该按钮可能会再次触发visible=false

我可能会对此采取不同的方向:编写一个包含按钮及其自己的侦听器的类。如果有很多共享行为(但根据您的需要,可能不是),这将是一个很好的计划。

所以,是的,请阅读currentTarget vs target

相关问题