2017-01-23 150 views
2

我遇到了一个问题,它带有Adobe Animate CC以及它使用的Javascript框架EaselJS/CreateJS。我可以添加无事件监听器,但我无法删除它们。我已经尝试过各种东西从调试器,包括步入他们的JS removeEventListener处理程序 - 虽然两个变量看起来相同,但它们从不==(或===),因此偶数侦听器不会被删除。Animate/EaselJS - removeEventListener不起作用

这里是我使用的代码,它的目的,它盘旋在它时淡入的元素:

this.fadeIn = function(target_mc) 
    { 
     target_mc.alpha = 0; 
     target_mc.visible = true; 

     target_mc.removeEventListener("tick",fadeIn_onEnterFrame); 
     target_mc.addEventListener("tick",fadeIn_onEnterFrame.bind(this)); 

     function fadeIn_onEnterFrame(evt) 
     { 
      evt.currentTarget.alpha = evt.currentTarget.alpha + .2; 
      if (evt.currentTarget.alpha >= 1) 
      { 
       evt.currentTarget.removeEventListener("tick",fadeIn_onEnterFrame); 
      } // end if 
     } 
    } // End of the function 

所以,你知道,它被添加到画布中frame_0,并从被称为一个“鼠标悬停”监听器添加到每个服装类型(它是一拖和拖放装扮游戏,FWIW)

function clothing_onRollOver() 
{ 
    this.hint_mc.desc_mc.desc1_txt.text = this.articleName; 
    this.fadeIn(this.hint_mc); 
    this.clothingOver = true; 
}; 
clothing.addEventListener("mouseover",clothing_onRollOver.bind(this)); 
+0

错误在'target_mc.removeEventListener(“tick”,fadeIn_onEnterFrame);'或...'evt.currentTarget.removeEventListener(“tick”,fadeIn_onEnterFrame);'或两者? – Zze

+0

我会与“两个” - 都没有工作。 – HungryBeagle

回答

2

似乎有一些问题范围界定与您的代码。下面的代码片段解决了您的问题并正确删除了事件侦听器,但是我不知道为什么当前的实现无法正常工作。

不同的是,我从target_mc.addEventListener("tick",fadeIn_onEnterFrame.bind(this));

不过我不清楚,为什么.bind()造成这个问题删除绑定。

stage.enableMouseOver(); 

clothingOver = false; 

this.hint_mc.visible = false; 

this.fadeIn = function(target_mc) 
{ 
    console.log(target_mc); 

    target_mc.alpha = 0; 
    target_mc.visible = true; 

    target_mc.removeEventListener("tick",fadeIn_onEnterFrame); 
    target_mc.addEventListener("tick",fadeIn_onEnterFrame); 

    function fadeIn_onEnterFrame(evt) 
    { 
     console.log("tick"); 
     evt.currentTarget.alpha = evt.currentTarget.alpha + .2; 

     if (evt.currentTarget.alpha >= 1) 
     { 
      evt.currentTarget.removeEventListener("tick", fadeIn_onEnterFrame); 
     } // end if 
    } 
} // End of the function 



function clothing_onRollOver() 
{ 
    //this.hint_mc.desc_mc.desc1_txt.text = this.articleName; 
    this.fadeIn(this.hint_mc); 
    this.clothingOver = true; 
}; 


this.clothing.addEventListener("mouseover",clothing_onRollOver.bind(this)); 

对不起,我无法确定你确切的根本原因。

+0

实际上,您已将它ID'd - 我从addEventListener中取出了“.bind(this)”,并且能够正确删除它。我应该注意到,我也尝试在所有的添加/删除调用中添加“.bind(this)”,这是行不通的。谢谢你的帮助! – HungryBeagle

+1

这样做的原因是因为'bind'每次都会创建一个新函数。如果您保存'bind'的值,可以稍后删除它:'this.fn = fadeIn_onEnterFrame.bind(); btn.addEventListenen(“tick”,fn); btn.removeEventListener(“tick”,fn);'如果你想保持'this'范围,绑定是很好的。 – Lanny

+0

Thanks @Lanny - 在执行Zze的更改后,我做了一个粗略的搜索解释,但找不到任何东西。 – HungryBeagle