Animate/EaselJS - removeEventListener不起作用
我遇到了一个问题,它带有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));
似乎有一些问题范围界定与您的代码。下面的代码片段解决了您的问题并正确删除了事件侦听器,但是我不知道为什么当前的实现无法正常工作。
不同的是,我从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));
对不起,我无法确定你确切的根本原因。
实际上,您已将它ID'd - 我从addEventListener中取出了“.bind(this)”,并且能够正确删除它。我应该注意到,我也尝试在所有的添加/删除调用中添加“.bind(this)”,这是行不通的。谢谢你的帮助! – HungryBeagle
这样做的原因是因为'bind'每次都会创建一个新函数。如果您保存'bind'的值,可以稍后删除它:'this.fn = fadeIn_onEnterFrame.bind(); btn.addEventListenen(“tick”,fn); btn.removeEventListener(“tick”,fn);'如果你想保持'this'范围,绑定是很好的。 – Lanny
Thanks @Lanny - 在执行Zze的更改后,我做了一个粗略的搜索解释,但找不到任何东西。 – HungryBeagle
错误在'target_mc.removeEventListener(“tick”,fadeIn_onEnterFrame);'或...'evt.currentTarget.removeEventListener(“tick”,fadeIn_onEnterFrame);'或两者? – Zze
我会与“两个” - 都没有工作。 – HungryBeagle