vue中window.addEventListener监听scroll事件

今天想在vue的项目里面用下拉加载,然后就直接写了:

mounted () {
	window.addEventListener( 'scroll', this.scrollHander)
},
methods: {
	scrollHander () {  }
}

但是我发现我切换路由以后依旧其他页面也触发了scrollHandler函数,然后我想到使用了vue-router做的spa项目,window对象不变的,所以需要在每次使用后销毁。

解决办法

我回去看了下vue文档的生命周期,看到了destroyed,然后直接在这个周期内销毁就可以了。

mounted () {
	window.addEventListener('scroll', this.scrollHander)
},
destroyed () {
	window.removeEventListener('scroll', this.scrollHander)
}

使用throttle出现的新问题

下拉加载一般需要配合throttle限流函数(原理可以看这里)来避免频繁触发,所以优化代码成这样:

mounted () {
	let  _this = this
	window.addEventListener('scroll', throttle(() => {
		_this.scrollHander()
	},200 ))
},

然后发现没法用removeEventListener了,因为这个函数第二个参数不接受匿名函数。

最后代码

用一个变量中转下

mounted () {
	let  _this = this
	this.throttleLoad = throttle(() =>{
		_this.scrollHander()
	},200)
	window.addEventListener('scroll', this.throttleLoad)
},
destroyed () {
	window.removeEventListener('scroll',this.throttleLoad) 
},
methods: { 
	scrollHander () { }
}

你可能感兴趣的:(Vue)