【问题标题】:removin event listener [duplicate]删除事件侦听器 [重复]
【发布时间】:2012-05-04 05:36:30
【问题描述】:

我正在将事件侦听器添加到 25 个影片剪辑。如果使用其中之一,我想从所有事件侦听器中删除所有事件侦听器。

var myMvc:movieclip; 
myMvc.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent)
{
   tasiSuruklemeyeBasla(e,myMvc,1,1);
   IEventDispatcher(e.currentTarget).removeEventListener(e.type,argu‌​ments.callee);
});

【问题讨论】:

    标签: actionscript-3 flash


    【解决方案1】:

    您在这里所做的是为每个侦听器创建一个单独的匿名函数对象。这没有多大意义,因为事件处理程序的代码对于所有侦听器都是相同的。也许您正尝试将一些数据与每个事件处理程序一起传递,以便能够判断哪些剪辑已被触发。有很多更好的方法可以实现这一点,而无需为每个侦听器创建单独的处理程序。

    无论如何,为了能够随时删除侦听器,您必须在某处保存对处理程序的引用。例如,您可以声明一个事件处理函数,并将其引用传递给您的所有侦听器(您最好在文档类或其他东西中声明它,但它也适用于时间线代码)。

    var eventHandler:Function = function(e:MouseEvent):void
    {
       var target:MovieClip = e.target as MovieClip;
       tasiSuruklemeyeBasla(e,target,1,1);
       target.removeEventListener(e.type,argu‌​ments.callee);
    };
    
    myMvc.addEventListener(MouseEvent.MOUSE_DOWN, eventHandler);
    
    // you can do that any time
    myMvc.removeEventListener(MouseEvent.MOUSE_DOWN, eventHandler);
    

    【讨论】:

    • 感谢您的回答。这不是解决我的问题的方法,但它是一个领先的方法。因为我将参数传递给 tasiSuruklemeyeBasla() 函数中的另一个函数。
    猜你喜欢
    • 2018-01-25
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2022-08-03
    • 2012-09-10
    • 1970-01-01
    相关资源
    最近更新 更多