簡體   English   中英

如何從類方法中刪除事件偵聽器

[英]How can I remove the event listener from a class method

我正在嘗試使用與添加事件偵聽器相同的引用從函數中刪除事件偵聽器,但removeEventListener不起作用

我想要onScroll方法停止偵聽器的滾動。

export class LazyLoad {
    constructor(elementoScroll, porcentagem, objetoAxios) {
        this.elementoScroll = elementoScroll
        console.log(this.elementoScroll.scrollTop)
        this.porcentagem = porcentagem
        this.objetoAxios = objetoAxios
        this.endereco = objetoAxios
        this.addListener()
    }

    addListener() {
        this.elementoScroll.addEventListener('scroll', this.onScroll.bind(this), true);
    }

    onScroll(event) {
        console.log(event)
        let scrollPorcentagem = Math.floor(this.elementoScroll.scrollTop / (this.elementoScroll.scrollHeight - this.elementoScroll.clientHeight) * 100);
        if(scrollPorcentagem >= 90) {
            this.elementoScroll.removeEventListener('scroll', this.onScroll, true);
        }

    }
}

addEventListenerreoveEventListener調用的function參數是不同的。 要查看此內容,請看以下簡化示例:

 class X { method() {} } let x = new X(); console.log(x.method.bind(x) === x.method); // false 

要解決此問題,請保留對添加事件偵聽器時使用的函數的引用:

class LazyLoad {
  constructor(elementoScroll, porcentagem, objetoAxios) {
    this.elementoScroll = elementoScroll;
    console.log(this.elementoScroll.scrollTop);
    this.porcentagem = porcentagem;
    this.objetoAxios = objetoAxios;
    this.endereco = objetoAxios;
    this.addListener();
  }

  addListener() {
    this.listener = this.onScroll.bind(this);
    this.elementoScroll.addEventListener('scroll', listener, true);
  }

  onScroll(event) {
    console.log(event);
    let scrollPorcentagem = Math.floor(this.elementoScroll.scrollTop / (this.elementoScroll.scrollHeight - this.elementoScroll.clientHeight) * 100);
    if (scrollPorcentagem >= 90) {
      this.elementoScroll.removeEventListener('scroll', this.listener, true);
    }

  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM