Javascript 动画/画架JS-removeEventListener不工作

Javascript 动画/画架JS-removeEventListener不工作,javascript,actionscript-3,createjs,easeljs,animate-cc,Javascript,Actionscript 3,Createjs,Easeljs,Animate Cc,我有一个问题,就是Adobe Animate CC及其使用的Javascript框架EaselJS/CreateJS。我可以添加没有问题的事件侦听器,但无法删除它们。我从调试器中尝试了各种方法,包括进入JS removeEventListener处理程序-尽管这两个变量看起来相同,但它们从来都不是==(或===),因此不会删除偶数侦听器 以下是我使用的代码,当鼠标悬停在某个元素上时,它会在该元素中消失: this.fadeIn = function(target_mc) {

我有一个问题,就是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
您知道,它被添加到第0帧的画布中,并从添加到每种服装类型的“鼠标悬停”侦听器中调用(用于拖放化妆游戏,FWIW)


您的代码似乎存在一些范围问题。下面的代码片段修复了您的问题并正确删除了事件侦听器,但是我不知道您当前的实现为什么不能正常工作

不同之处在于我已经从
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));

很抱歉,我无法为您确定确切的根本原因

是目标上的错误。removeEventListener(“勾号”,fadeIn_onEnterFrame)或<代码>evt.currentTarget.removeEventListener(“勾选”,fadeIn_onEnterFrame)或两者?我会选择“两者”-两者都不起作用。事实上,您已经识别了它-我从addEventListener中删除了“.bind(this)”,并且它能够正确地删除它。我应该注意,我还尝试将“.bind(this)”添加到所有的添加/删除调用中,但没有成功。谢谢你的帮助!这样做的原因是
bind
每次都创建一个新函数。如果保存了
bind
的值,以后可以删除它:
this.fn=fadeIn_onEnterFrame.bind();附录1(“勾号”,fn);btn.removeEventListener(“勾号”,fn)这个
范围,代码>绑定是很好的。谢谢@Lanny-我在实现Zze的更改后粗略地搜索了一个解释,但找不到任何东西。@HungryBeagle我也在搜索原因,以了解为什么
.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));