我的按钮有mouse_over,mouse_out和CLICK事件。但是,当我单击按钮时,它会将我带到另一个框架,并且mouse_out事件尝试触发。我该如何阻止这种情况发生?
act1_btn.addEventListener(MouseEvent.CLICK, act1Pressed);
act1_btn.addEventListener(MouseEvent.MOUSE_OVER, act1Over);
act1_btn.addEventListener(MouseEvent.MOUSE_OUT, act1Out);
act1_btn.addEventListener(Event.ENTER_FRAME, act1EnterFrame);
function act1Over(e:MouseEvent):void
{
trace("over");
act1Animating = true;
logo_1.visible = true;
bubble.visible = true;
txt1.visible = true;
}
function act1Out(e:MouseEvent):void
{
act1Animating = false;
logo_1.visible = false;
bubble.visible = false;
txt1.visible = false;
}
function act1EnterFrame(e:Event):void
{
if (act1Animating && e.target.scaleY < 1.1)
{
e.target.scaleY += 0.02;
e.target.scaleX += 0.02;
}
if (!act1Animating && e.target.scaleY > 1)
{
e.target.scaleY -= 0.02;
e.target.scaleX -= 0.02;
}
}
function act1Pressed(e:MouseEvent):void
{
trace("clicked");
act1Animating = false;
logo_1.visible = false;
bubble.visible = false;
txt1.visible = false;
gotoAndStop(2);
}
答案 0 :(得分:2)
以下是处理此问题的两种方法:
1)仅在MOUSE_OVER处理程序中分配MOUSE_OUT侦听器,然后在MOUSE_OUT处理程序完成后将其删除。即,
function act1Over(e:MouseEvent):void {
/* your code */
act1_btn.addEventListener(MouseEvent.MOUSE_OUT, act1Out);
}
function act1Out(e:MouseEvent):void {
/* your code */
act1_btn.removeEventListener(MouseEvent.MOUSE_OUT, act1Out);
}
2)在CLICK处理程序中使用stopPropagation():
function act1Pressed(e:MouseEvent):void {
/* your code */
e.stopPropagation();
}
此外,将来请使用代码标记来标记您的代码!
答案 1 :(得分:2)
将ROLL_OVER和ROLL_OUT MouseEvent改为一个镜头并不是一个坏主意。当有人翻过物体或翻滚时,这些只会发射一次,而不是连续发射。
答案 2 :(得分:0)
单击按钮时,将触发MouseOver&amp;如果您不希望在Click事件之后触发MouseOut事件,那么您应该删除Click事件侦听器中的MouseOut事件侦听器。
这意味着为了确保您在MouseOver时拥有MouseOut侦听器,您应该在MouseOver侦听器中添加MouseOut侦听器。
最后,您应该删除MouseOut侦听器中的MouseOut事件侦听器。