2010-10-17 240 views
2

我有带有mouse_over,mouse_out和CLICK事件的按钮。但是当我点击按钮时,它将我带到另一个框架,并尝试触发mouse_out事件。我如何阻止这种情况发生?当鼠标点击触发时,如何停止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; }

功能act1EnterFrame(E:事件):无效 { 如果(act1Animating & & e.target.scaleY < 1.1) { e.target.scaleY + = 0.02; e.target.scaleX + = 0.02;

}

如果(act1Animating & & e.target.scaleY> 1!) { e.target.scaleY - = 0.02; e.target.scaleX - = 0.02; } }

功能act1Pressed(E:MouseEvent)方法:无效 { 迹( “点击”); act1Animating = false; logo_1.visible = false; bubble.visible = false; txt1.visible = false; gotoAndStop(2); }

回答

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)使用stopPropagation()在点击处理程序:

function act1Pressed(e:MouseEvent):void { 
    /* your code */ 
    e.stopPropagation(); 
} 

此外,在未来,请使用代码标签来标记你的代码!

+0

非常感谢你 – 2010-10-18 08:19:30

0

当你点击一个按钮,你将会触发鼠标悬停& mouseOut事件,如果你不想Click事件后触发mouseout事件,那么你就应该删除mouseout事件侦听器的Click事件侦听器。

这意味着为了确保在MouseOver时有一个MouseOut侦听器,您应该在MouseOver侦听器中添加您的MouseOut侦听器。

最后,您应该删除MouseOut侦听器中的MouseOut事件侦听器。

+0

不客气;) – PatrickS 2010-10-18 10:00:03

2

改为给ROLL_OVER和ROLL_OUT MouseEvent一个镜头可能不是一个坏主意。当有人翻转物体时,这些只会发射一次,或者是推出,而不是连续发射。

+0

ROLL_OVER和ROLL_OUT是为我修复它。谢谢。 – 2010-11-04 23:48:24