我需要禁用onClick操作,直到动画停止。动画可以通过4个不同的按钮启动 - 所有按钮都需要停用。
我使用一个监听器将params传递给将启动动画的函数,这就是我在add listener中使用匿名函数的原因:
up.addEventListener(MouseEvent.CLICK,
function(event:MouseEvent):void
{
revealSpinner(event,51.42,1,spinner);
event.currentTarget.removeEventListener(event.type, arguments.callee);
},
false, 0, true);
我还有一个自调用删除侦听器,但实际上我需要从其他3个按钮中删除侦听器。
我也试过命名匿名函数但是没有用:
up.addEventListener(MouseEvent.CLICK,
myFunc = function(event:MouseEvent):void
{
revealSpinner(event,51.42,1,spinner);
},
false, 0, true);
// somewhere else in my app
up.removeEventListener(MouseEvent.CLICK, myFunc );
编辑: 4个按钮中的每一个都必须将不同的参数传递给revealSpinner()方法 revealSpinner(事件,51.42,1,旋); revealSpinner(事件,51.42,-1,旋转器); revealSpinner(事件,120,1,anotherMC); revealSpinner(事件120,-1,anotherMC);
答案 0 :(得分:1)
您可以使用event.currentTarget参数,因为您已经在回调函数中显示了该参数。只需使用switch语句根据函数的调用方式设置参数:
function setupButtons()
{
...
this.up.addEventListener(MouseEvent.CLICK, cbButtonClick, false, 0, true );
this.down.addEventListener(MouseEvent.CLICK, cbButtonClick, false, 0, true );
}
function cbButtonClick( event:MouseEvent ):void
{
switch( event.currentTarget )
{
case this.up:
revealSpinner(event,51.42,1,spinner);
break;
case this.down:
revealSpinner(event,999999,1,spinner);
break;
}
event.currentTarget.removeEventListener(event.type, cbButtonClick);
}
答案 1 :(得分:0)
不要使用匿名功能。如果为每个按钮定义一个处理程序,您仍然可以传递自定义参数,但是您将拥有一个可以在任何时候删除的正确定义的侦听器:
up.addEventListener(MouseEvent.CLICK, upButtonHandler, false, 0, true);
function upButtonHandler(event:MouseEvent):void
{
revealSpinner(event,51.42,1,spinner);
up.removeEventListener(MouseEvent.CLICK, upButtonHandler);
}
down.addEventListener(MouseEvent.CLICK, downButtonHandler, false, 0, true);
function downButtonHandler(event:MouseEvent):void
{
revealSpinner(event,999.999,999,spinner);
down.removeEventListener(MouseEvent.CLICK, downButtonHandler);
}