无法删除Javascript上的eventlistener

无法删除Javascript上的eventlistener,javascript,dom-events,Javascript,Dom Events,我有这样一个函数: if (localStorage.wsttoc_stat === undefined) { localStorage.wsttoc_stat = "Stop"; } function ScrollToTop() { var elem = document.querySelector('.elementclass'); var scroll_height = elem.scrollTop; var scroll_offset = e

我有这样一个函数:

if (localStorage.wsttoc_stat === undefined) { localStorage.wsttoc_stat = "Stop"; }

function ScrollToTop()
{
    var elem = document.querySelector('.elementclass');
    var scroll_height = elem.scrollTop;
    var scroll_offset = elem.offsetTop;

    function gotoTop()
    {
      if(scroll_height > scroll_offset)
      {
        setTimeout(function(){
          elem.scrollTop = scroll_offset;
        }, 1000);
        setTimeout(function(){
          elem.scroll_height = elem.scrollTop;
        }, 2000);
      }
    }

    console.log(localStorage.wsttoc_stat);
    if(localStorage.wsttoc_stat == "Scrolling")
    {

      localStorage.wsttoc_stat = 'Stop';
      console.log(localStorage.wsttoc_stat);
      elem.removeEventListener('scroll', gotoTop);

    } else {

      localStorage.wsttoc_stat = "Scrolling";
      console.log(localStorage.wsttoc_stat);
      elem.addEventListener('scroll', gotoTop);
      gotoTop();
    }
}

document.querySelector('#elementid').addEventListener('click', function(){ ScrollToTop(); });
if (localStorage.wsttoc_stat === undefined) {
    localStorage.wsttoc_stat = "Stop";
}

function gotoTop() {
    var elem = document.querySelector('.elementclass');
    var scroll_height = elem.scrollTop;
    var scroll_offset = elem.offsetTop;
    if (scroll_height > scroll_offset) {
        setTimeout(function() {
            elem.scrollTop = scroll_offset;
        }, 1000);
        setTimeout(function() {
            elem.scroll_height = elem.scrollTop;
        }, 2000);
    }
}

function ScrollToTop() {
    var elem = document.querySelector('.elementclass');
    console.log(localStorage.wsttoc_stat);
    if (localStorage.wsttoc_stat == "Scrolling") {
        localStorage.wsttoc_stat = 'Stop';
        console.log(localStorage.wsttoc_stat);
        elem.removeEventListener('scroll', gotoTop);

    } else {
        localStorage.wsttoc_stat = "Scrolling";
        console.log(localStorage.wsttoc_stat);
        elem.addEventListener('scroll', gotoTop);
        gotoTop();
    }
}

document.querySelector('#elementid').addEventListener('click', function() {
    ScrollToTop();
});
该功能通过单击按钮来执行。 它已经在运行,但当我点击按钮停止时,它会一直滚动

请告诉我哪里出错了?

只要

document.querySelector('#elementid').addEventListener('click',ScrollToTop);

由于每次调用
ScrollToTop
时,它都会创建一个新的
gotoTop
函数,因此
gotoTop
的引用发生了更改。这就是为什么
removeEventListener
没有达到您的预期。尝试如下更改代码:

if (localStorage.wsttoc_stat === undefined) { localStorage.wsttoc_stat = "Stop"; }

function ScrollToTop()
{
    var elem = document.querySelector('.elementclass');
    var scroll_height = elem.scrollTop;
    var scroll_offset = elem.offsetTop;

    function gotoTop()
    {
      if(scroll_height > scroll_offset)
      {
        setTimeout(function(){
          elem.scrollTop = scroll_offset;
        }, 1000);
        setTimeout(function(){
          elem.scroll_height = elem.scrollTop;
        }, 2000);
      }
    }

    console.log(localStorage.wsttoc_stat);
    if(localStorage.wsttoc_stat == "Scrolling")
    {

      localStorage.wsttoc_stat = 'Stop';
      console.log(localStorage.wsttoc_stat);
      elem.removeEventListener('scroll', gotoTop);

    } else {

      localStorage.wsttoc_stat = "Scrolling";
      console.log(localStorage.wsttoc_stat);
      elem.addEventListener('scroll', gotoTop);
      gotoTop();
    }
}

document.querySelector('#elementid').addEventListener('click', function(){ ScrollToTop(); });
if (localStorage.wsttoc_stat === undefined) {
    localStorage.wsttoc_stat = "Stop";
}

function gotoTop() {
    var elem = document.querySelector('.elementclass');
    var scroll_height = elem.scrollTop;
    var scroll_offset = elem.offsetTop;
    if (scroll_height > scroll_offset) {
        setTimeout(function() {
            elem.scrollTop = scroll_offset;
        }, 1000);
        setTimeout(function() {
            elem.scroll_height = elem.scrollTop;
        }, 2000);
    }
}

function ScrollToTop() {
    var elem = document.querySelector('.elementclass');
    console.log(localStorage.wsttoc_stat);
    if (localStorage.wsttoc_stat == "Scrolling") {
        localStorage.wsttoc_stat = 'Stop';
        console.log(localStorage.wsttoc_stat);
        elem.removeEventListener('scroll', gotoTop);

    } else {
        localStorage.wsttoc_stat = "Scrolling";
        console.log(localStorage.wsttoc_stat);
        elem.addEventListener('scroll', gotoTop);
        gotoTop();
    }
}

document.querySelector('#elementid').addEventListener('click', function() {
    ScrollToTop();
});

你好sodust,欢迎来到Stack Overflow。你能给你的答案提供更多的背景吗?为什么它会起作用?您提供的代码实际上与问题中的代码在功能上没有区别。