React 监听页面滚动,界面动态显示
以下是常见的监听滚动以及相应的操作
窗口滚动事件
当页面滚动时,如何动态切换布局/样式
1. 添加滚动事件的监听/注销
- 1 //在componentDidMount,进行scroll事件的注册,绑定一个函数,让这个函数进行监听处理
- 2 componentDidMount() {
- 3 window.addEventListener('scroll', this.bindHandleScroll)
- 4 }
- 5 //在componentWillUnmount,进行scroll事件的注销
- 6 componentWillUnmount() {
- 7 window.removeEventListener('scroll', this.bindHandleScroll);
- 8 }
- 9 bindHandleScroll = (event) => {
- 10
- 11 }
2. 在state中添加参数,滚动页面时更新数据
更新参数后,设置样式。可以直接更新样式,也可以动态修改className然后在css文件中添加动态样式。
- 1 bindHandleScroll = (event) => {
- 2 // 滚动的高度
- 3 const scrollTop = event.srcElement.documentElement.scrollTop
- 4 || window.pageYOffset
- 5 || event.srcElement.body.scrollTop;
- 6 this.setState({
- 7 hasVerticalScrolled: scrollTop > 10
- 8 })
- 9 }
- 10 render() {
- 11 return (
- 12 <div className="header-container" style={{backgroundColor:this.state.hasVerticalScrolled?'#ffffff':'transparent'}}>
- 13 <div className="headerTitle-container">
- 14 <img className={`headerTitle${this.state.hasVerticalScrolled ? '-scrolled' : ''}`}></img>
- 15 </div>
- 16 </div>
- 17 );
- 18 }
完整Code:


- 1 import React, { Component } from 'react';
- 2 import './style.less';
- 3
- 4 interface PropsData {
- 5 }
- 6 interface StateData {
- 7 hasVerticalScrolled: boolean;
- 8 }
- 9
- 10 class Index extends Component<PropsData, StateData> {
- 11 constructor(props) {
- 12 super(props);
- 13 this.state = {
- 14 hasVerticalScrolled: false
- 15 };
- 16 }
- 17
- 18 //在componentDidMount,进行scroll事件的注册,绑定一个函数,让这个函数进行监听处理
- 19 componentDidMount() {
- 20 window.addEventListener('scroll', this.bindHandleScroll)
- 21 }
- 22 //在componentWillUnmount,进行scroll事件的注销
- 23 componentWillUnmount() {
- 24 window.removeEventListener('scroll', this.bindHandleScroll);
- 25 }
- 26 bindHandleScroll = (event) => {
- 27 // 滚动的高度
- 28 const scrollTop = event.srcElement.documentElement.scrollTop
- 29 || window.pageYOffset
- 30 || event.srcElement.body.scrollTop;
- 31 this.setState({
- 32 hasVerticalScrolled: scrollTop > 10
- 33 })
- 34 }
- 35 render() {
- 36 return (
- 37 <div className="header-container" style={{backgroundColor:this.state.hasVerticalScrolled?'#ffffff':'transparent'}}>
- 38 <div className="headerTitle-container">
- 39 <img className={`headerTitle${this.state.hasVerticalScrolled ? '-scrolled' : ''}`}></img>
- 40 </div>
- 41 </div>
- 42 );
- 43 }
- 44 }
- 45
- 46 export default Index;
容器内滚动
监听元素触发滚动
- 1 <div onScroll={exerciseContainerScrolled}>
- 2 </div>
- 1 const exerciseContainerScrolled = () => {
- 2 const exerciseContainerRoot = (document.getElementsByClassName('exercise-container') as HTMLCollectionOf<HTMLElement>)[0];
- 3 onScrollShowed(exerciseContainerRoot.scrollTop >= 200);
- 4 };
React 监听页面滚动,界面动态显示的更多相关文章
- react 监听页面滚动
html: // 如果使用typescript, 定义dom类型 private dom: HTMLDivElement | null // ReactJS中,对Div监听只需要绑定 onScroll ...
- vue中监听页面滚动和监听某元素滚动
①监听页面滚动 在生命周期mounted中进行监听滚动: mounted () { window.addEventListener('scroll', this.scrollToTop) }, 在方法 ...
- vue 中监听页面滚动
监听页面滚动 在methods中定义一个方法 handleScroll() { //获取滚动时的高度 let scrollTop = window.pageYOffset || document.do ...
- 原 JQuery监听页面滚动总结
1.当前滚动的地方的窗口顶端到整个页面顶端的距离: var winPos = $(window).scrollTop(); 2.获取指定元素的页面位置: $(val).offset().top; 3. ...
- JQuery监听页面滚动总结
1.当前滚动的地方的窗口顶端到整个页面顶端的距离: var winPos = $(window).scrollTop(); 2.获取指定元素的页面位置: $(val).offset().top; 3. ...
- ionic 监听页面滚动,点击停止滚动
类似今日头条,页面上有很多card,点击每个card跳转该card的详情页面.这里有一个问题,当我滚动页面时,会先后触发touchstart.touchmove.touchend,但是当touchen ...
- JS监听页面滚动到底部事件
废话不说,直接上代码,放心我这个是最好的,直接放到js脚本里,直接生效: $(window).scroll(function(){ var scrollTop = $(this).scrollTop( ...
- js-监听页面滚动
两种监听页面滚动的方法 一.原生js通过window.onscroll监听 window.onscroll = function() { //为了保证兼容性,这里取两个值,哪个有值取哪一个 //scr ...
- uni-app中不使用scroll-view组件,监听页面滑直底部事件
最终达到的目标效果 将要用到 监听页面滚动事件:onPageScroll 获取节点信息uni.createSelectorQuery() 标签布局 <template> <view ...
- jq监听页面的滚动事件,
jQuery监听页面的滚动状态,实现代码: $(document).scroll(function() { var scroH = $(document).scrollTop(); //滚 ...
随机推荐
- 【confluence】jira issue宏中如何把优先级图标转义成文字
在confluece中,关于表格处理有2个非常好的插件. Table Filter and Charts for Confluence (插件文档:https://docs.stiltsoft ...
- 微信小程序-实现微信登录
业务流程: 1:首先需要一个按钮触发事件 2:调用微信小程序的登录接口wx.login,拿到code 3:调用微信小程序的获取用户信息的接口wx.getUserProfile,拿到用户的个人信息 4: ...
- TCP粘包和拆包
假设客户端分别发送了两个数据包D1和D2给服务器,由于服务器一次读取的字节数是不确定的,故可能存在以下4中情况: 服务端分两次读到了两个独立的数据包D1和D2,没有粘包和拆包 服务端分一次收到两个数据 ...
- JMeter压测脚本实例:单接口
新建测试计划 添加线程组 添加HTTP请求 配置该请求相关参数 1.请求头部信息 ①HTTP请求同级线程组下添加HTTP信息头部管理器 ②填充该请求所需的头部信息 2.请求体 选中之前增加的HTTP请 ...
- Linux shell usage()使用说明
usage()类似于执行文件-help展示的内容,即告诉使用者有哪些参数选项可供使用. usage()格式 点击查看代码 #!/bin/bash usage() { echo "Usage: ...
- JAVA加载PMML算法模型
注:加载失败时尝试修改pmml文件版本为4.3 依赖 <dependency> <groupId>org.jpmml</groupId> <artifactI ...
- BaseMapperX
package cn.iocoder.yudao.framework.mybatis.core.mapper; import cn.iocoder.yudao.framework.common.poj ...
- Linux提权-权限升级
特权升级是一段旅程.没有灵丹妙药,很大程度上取决于目标系统的具体配置.内核版本.已安装的应用程序.支持的编程语言.其他用户的密码是影响您通往 root shell 之路的几个关键因素 什么是特权升级? ...
- Google colab复现openpose+st-gcn的心路历程
Google colab复现openpose+st-gcn的心路历程: 因为本人的大致研究方向为动作识别,加上自己的笔记本比较菜鸡,没有牛皮的显卡,所以采用了google的colab.在网上查了三天, ...
- Android笔记--图像显示
imageView 具体实现: 注意:图片名称应当为小写的英文字母与数字的结合,当然,二者可以只存在其一 图片的放置的比例:(通过scaleType属性设置) ImageButton ImageBut ...