【问题标题】:How to properly remove an event listener?如何正确删除事件监听器?
【发布时间】:2015-02-27 11:18:03
【问题描述】:

我有一些事件侦听器,一旦不再需要它们就可以删除。 我遵循了其他一些人的建议,并将 RemoveEventListener 包含在函数本身中,例如:

        object1.addEventListener(MouseEvent.MOUSE_DOWN, function StartMove(event:MouseEvent):void
        {
            mousePoint = new Point(MC.mouseX, MC.mouseY);
            objectOffset = new Point(int(mousePoint.x - object1.x), int(mousePoint.y - object1.y));
            mousePoint.y -= objectOffset.y;
            mousePoint.x -= objectOffset.x;
            mousePressed = true;
            event.currentTarget.removeEventListener(event.type, StartMove);
        });

但这只是创建侦听器,然后在使用一次时将其删除。 事件侦听器函数在更大的函数 (MouseMoves()) 中创建,因为它们使用 MouseMoves() 中的局部变量。 (不确定这是否是合适的方法。) 因此,如果我尝试从外部删除侦听器,他们看不到要删除的函数名称,并且我无法在 MouseMoves() 之外声明函数,因为它们在其中使用变量。

我觉得这是一个糟糕的设计,但我不确定在哪里?

是否有“适当的”更标准的方式来移除事件监听器?

谢谢。

【问题讨论】:

    标签: events actionscript listener


    【解决方案1】:

    当您准备好删除事件侦听器时,您可以使用最初添加它时使用的相同语法。因此,当您准备好删除此侦听器时,您可以在代码中的某处拥有这个

    object1.removeEventListener(MouseEvent.MOUSE_DOWN, function StartMove(event:MouseEvent):void
    

    这样你就可以明确你想从哪个对象中删除监听器。 您的鼠标功能如下所示:

    object1.addEventListener(MouseEvent.MOUSE_DOWN, function StartMove(event:MouseEvent):void
            {
                mousePoint = new Point(MC.mouseX, MC.mouseY);
                objectOffset = new Point(int(mousePoint.x - object1.x), int(mousePoint.y - object1.y));
                mousePoint.y -= objectOffset.y;
                mousePoint.x -= objectOffset.x;
                mousePressed = true;
            });
    

    【讨论】:

      【解决方案2】:

      是的,您的编码:

      event.currentTarget.removeEventListener(event.type, StartMove);
      

      可以在 StartMove 功能中毫无问题地使用。它只是在监听器中注销事件,如果它在事件函数中,请不要担心。当然你也可以使用:

      object1.removeEventListener(MouseEvent.MOUSE_DOWN, StartMove);
      

      如果您不想使用 event.currentTarget.removeEventListener,也可以在 StartMove 函数中使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-16
        • 2011-05-23
        • 1970-01-01
        • 1970-01-01
        • 2015-08-31
        • 2021-07-24
        相关资源
        最近更新 更多