我正在尝试使用与添加事件侦听器相同的引用从函数中删除事件侦听器,但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);
}
}
}
答案 0 :(得分:2)
您的addEventListener
和reoveEventListener
调用的函数参数是不同的。为此,请看以下简化示例:
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);
}
}
}