javascript - 调整大小后删除事件监听器

标签 javascript

调整浏览器大小后,我需要删除事件监听器。我尝试过这样的事情:

  window.addEventListener('resize', () => {
      const bp = this.breakpointInit.getValue();

      if (bp === 'mobile') {
        this.toggleMobile();
      } else {
        this.toggleDesktop();
      }
    });
  }

  toggleMobile() {
    Array.prototype.forEach.call(this.elements, (el) => {
      const activeClass = `${el.classList[0]}--active`;

      el.addEventListener('touchstart', (e) => {
        this.switchClass(e, el, activeClass);
      });

      el.removeEventListener('mouseenter', (e) => {
        this.switchClass(e, el, activeClass);
      });

      el.removeEventListener('mouseleave', (e) => {
        this.switchClass(e, el, activeClass);
      });
    });
  }

  toggleDesktop() {
    Array.prototype.forEach.call(this.elements, (el) => {
      const activeClass = `${el.classList[0]}--active`;

      el.addEventListener('click', (e) => {
        this.switchClass(e, el, activeClass);
      });

      el.addEventListener('mouseenter', (e) => {
        this.switchClass(e, el, activeClass);
      });

      el.addEventListener('mouseleave', (e) => {
        this.switchClass(e, el, activeClass);
      });

      el.removeEventListener('touchstart', (e) => {
        this.switchClass(e, el, activeClass);
      });
    });
  }

上述函数会在需要时触发,但事件监听器会被保留。我做错了什么?

最佳答案

您正在分配匿名函数,该函数实际上无法删除。

尝试这样的事情:

let me = this;

//this probably won't work exactly as-is, but you should get the idea
touchStartHandler(e) {
    me.switchClass(e, el, activeClass);
}

el.addEventListener('touchstart', touchStartHandler);

//...

el.removeEventListener('touchstart', touchStartHandler);

拥有一个命名函数可以让您随时添加和删除内容,因为您拥有对原始处理函数的引用。

关于javascript - 调整大小后删除事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37211018/

相关文章:

javascript - 如何从字符串中获取姓氏

javascript - 为什么我使用 =(单个等于)的相等比较不能正常工作?

javascript - jQuery DataTable + sAjaxSource + Spring(服务端处理)处理

javascript - 如何禁用对数据表第一列的排序效果

使用preventDefault的JavaScript多种形式不起作用

javascript - 为什么 eval 在这里失败了?

javascript - 使用 Angular 指令加载部分不在第二次加载 View 时呈现

javascript - 悬停时触发 Canvas 动画

javascript - 如何在firebase中通过电子邮件建立索引?

javascript - jQuery,统计<ul>中动态添加的<li>的数量