在AS3中的foron函数的removeEventListener

时间:2010-01-05 16:33:39

标签: actionscript-3 addeventlistener

我需要禁用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);

2 个答案:

答案 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);
}