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

news/2024/7/15 17:06:38 标签: react.js, javascript

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
}

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


http://www.niftyadmin.cn/n/875704.html

相关文章

基于vue的图片剪裁工具vue-croppe

基于vue的图片剪裁工具vue-croppe 安装 // npm安装 npm install --save vue-croppa // yarn 安装 yarn add vue-croppa使用 引入插件 两种引用方式 // 全局注册 main.js import VueCropper from vue-cropper Vue.use(VueCropper)// 组件内单独使用 userAvatar.vue import { …

vue实现一键复制

在个人项目中为了更好的完善体验,需要有一个一键复制的功能复制,主要的实现方法有以下几个: 不使用插件 使用input配合document.execComman方法可以实现; 这个特性已经过时了,它在一些浏览器中仍然可以工作&#xff…

基于element封装table、分页

在利用element-ui Table编写项目时,会存在表格展示的数据存在分页的情况,基本每个页面都要配置,很影响开发效率,也不利于后期维护,所以统一封装一下,便于开发使用。 How to Use: 在src/components目录中创建base-table&#xff0…

vue自定义音频audio样式及操作面板

简介 由于audio标签原生样式不能满足项目需要,需要自定义样式,项目使用技术为vue,将自定义audio封装为一个组件,可以在其他组件内进行引用,主要进行了以下修改: 1、隐藏原生audio标签 2、通过div实现自定义样式 3、控…

常见的数据埋点方式介绍

首先我们要先了解数据埋点,到底有什么用处? 1、对设计师而言 根据埋点统计出页面元素的点击,页面按钮的点击转化,有助于在后续中作进一步视觉调优。 2、对产品/运营/推广而言 可作为产品/运营/推广当次产品功能/运营活动/渠道推广…

arcgis js 移除某一个点_lax.js(scroll动画插件)介绍

本文是对github上开源项目laxxx的介绍,不到10天已有3500star。 传送门1. 简介laxxx是一款简单轻巧&#xff08;<2kb gzipped&#xff09;的javascript插件,当你滚动时创建流畅和美丽的动画的开源项目&#xff0c;通过监听scroll,使元素在页面上活跃起来。2. 初始化将lax.js导…

proteus画完图怎么保存_2020国考报名照片怎么一键处理?

2020国考报名确认及缴费时间为2019年10月31日0:00至11月6日 24:00报名确认有一个很重要的步骤就是处理照片&#xff01;先看看国考报名照片要求近期免冠正面证件照片&#xff0c;蓝底或白底jpg或jpeg格式照片宽度不低于295像素高度不低于413像素你没有白底或蓝底照片怎么办&…

2020年蓝桥杯比赛时间_2020年五人制“政法杯”足球比赛男子甲组

2020 年“政法杯”足球比赛男子甲组01AI 法男足 1 队1队伍介绍人工智能法学院足球队&#xff0c;永远不是纸面实力最强的一支&#xff0c;但是我们坚信&#xff0c;AI法足球队一定是最坚韧的那支。踏上球场&#xff0c;即是战场&#xff0c;即是舞台。披挂登场&#xff0c;粉墨…