Javascript 带有命名函数的window.removeEventListener为';行不通
我正在使用React,下面是我用来实现无限滚动特性的代码Javascript 带有命名函数的window.removeEventListener为';行不通,javascript,reactjs,dom-events,infinite-scroll,Javascript,Reactjs,Dom Events,Infinite Scroll,我正在使用React,下面是我用来实现无限滚动特性的代码 componentDidMount() { // Flag to check if the content has loaded. let flag = true; function infiniteScroll() { let enterpriseWrap = $('.enterprise-blocks'); let contentHeight = enterpriseWrap.offs
componentDidMount() {
// Flag to check if the content has loaded.
let flag = true;
function infiniteScroll() {
let enterpriseWrap = $('.enterprise-blocks');
let contentHeight = enterpriseWrap.offsetHeight;
let yOffset = window.pageYOffset;
let y = yOffset + window.innerHeight;
console.log('hey');
if(this.props.hasMore) {
if(y >= contentHeight && flag) {
flag = false;
this.props.loadMoreVendors(function() {
flag = true;
});
}
} else {
window.removeEventListener('scroll', infiniteScroll.bind(this));
}
}
window.addEventListener('scroll', infiniteScroll.bind(this));
}
实际上,我想在加载所有项目后解除滚动事件的绑定,但
removeEventListener
不起作用。我做错什么了吗?每次绑定一个函数时,都会得到一个新函数。您正在从最初添加的侦听器中删除另一个侦听器。存储函数的结果。绑定并在两个位置使用
this.boundInfiniteScroll = this.infiniteScroll.bind(this);
...
} else {
window.removeEventListener('scroll', this.boundInfiniteScroll);
}
}
window.addEventListener('scroll', this.boundInfiniteScroll);
若要removeEventListener
您必须传递与传递给addEventListener
相同的函数引用,返回新引用,因为它是新函数
bind()方法创建一个新函数,该函数在调用时具有
此关键字设置为提供的值,并具有给定的
调用新函数时,将在任何函数前面提供参数
因此,在您的示例中,有两个不同的引用,这就是removeEventListener
不起作用的原因
let flag = true;
const infiniteScrollFn = infiniteScroll.bind(this);
function infiniteScroll() {
let enterpriseWrap = $('.enterprise-blocks');
let contentHeight = enterpriseWrap.offsetHeight;
let yOffset = window.pageYOffset;
let y = yOffset + window.innerHeight;
if (this.props.hasMore) {
if (y >= contentHeight && flag) {
flag = false;
this.props.loadMoreVendors(function() {
flag = true;
});
}
} else {
window.removeEventListener('scroll', infiniteScrollFn);
}
}
window.addEventListener('scroll', infiniteScrollFn);
太棒了。谢谢。