我有一个带有Adobe Animate CC的问题,它使用的Javascript框架EaselJS / CreateJS。我可以添加没有问题的事件侦听器,但是无法删除它们。我已经尝试了调试器进行的各种操作,包括进入其JS 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的Canvas中,并从添加到每种服装类型的“鼠标悬停”监听器中调用(用于拖放式装扮游戏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));
抱歉,我无法为您确定确切的根本原因。
关于javascript - Animate/EaselJS-removeEventListener不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41816274/