react监听页面滚动事件:window.addEventListener的scroll无效

react监听页面滚动事件:window.addEventListener的scroll无效

在react项目中需要通过监听页面滚动高度,控制页面样式动态展示,所以在网上找了以后其他案例发现监听无效,代码如下:

//在componentDidMount,进行scroll事件的注册,绑定一个函数,让这个函数进行监听处理
 componentDidMount() {
	window.addEventListener('scroll', this.handleScroll);
 }
//在componentWillUnmount,进行scroll事件的注销
componentWillUnmount() {
        window.removeEventListener('scroll', this.handleScroll);
}

handleScroll=(event)=>{
	console.log('开始滚动了')
}

一开始怎么调试都不行,handleScroll事件根本就不会触发,后来查看了addeventlistener 方法的用法时发现有三个参数,尝试着添加了一下,发现滚动可以触发了
image.png
useCapture设置为true时候就发现解决了这个问题,修改后代码:

//在componentDidMount,进行scroll事件的注册,绑定一个函数,让这个函数进行监听处理
 componentDidMount() {
	window.addEventListener('scroll', this.handleScroll, true);
 }
//在componentWillUnmount,进行scroll事件的注销
componentWillUnmount() {
        window.removeEventListener('scroll', this.handleScroll, true);
}

handleScroll=(event)=>{
	console.log('开始滚动了')
}

最后贴一下获取高度的完整代码,需要的可以看一下

//在componentDidMount,进行scroll事件的注册,绑定一个函数,让这个函数进行监听处理
 componentDidMount() {
	window.addEventListener('scroll', this.handleScroll, true);
 }
//在componentWillUnmount,进行scroll事件的注销
componentWillUnmount() {
        window.removeEventListener('scroll', this.handleScroll, true);
}

handleScroll=(event)=>{
	if (!event.srcElement.scrollTop) {
		//处理向上使劲滚动的时候scrollTop为undefined
		return undefined
	}
	// 滚动的高度
	const scrollTop =
		(event.srcElement ? event.srcElement.scrollTop : false) ||
		window.pageYOffset ||
		(event.srcElement ? event.srcElement.body.scrollTop : 0)
	// 视窗高度
	const clientHeight = (event.srcElement && event.srcElement.clientHeight) || document.body.clientHeight
	// 页面高度
	const scrollHeight = (event.srcElement && event.srcElement.scrollHeight) || document.body.scrollHeight
	// 距离页面底部的高度
	const height = scrollHeight - scrollTop - clientHeight

	return height
}

更多文章__> >> 码砖猿的技术博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值