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(); //滚 ...
随机推荐
- ubuntu clean swap
https://askubuntu.com/questions/1357/how-to-empty-swap-if-there-is-free-ram#:~:text=a single line-,s ...
- jxg项目Day4-数据库和mybatis的连接映射
配置:yml配置文件中配置数据库的参数,还有映射的参数 1.建实体类User,属性与数据库表对应 2.Mapper包下建UserMapper,继承BaseMapper<User> 3.Se ...
- Java开发词汇
Java基础常见英语词汇(70个) OO: object-oriented ,面向对象 OOP: object-oriented programming,面向对象编程 JDK:Java develop ...
- Spring MVC 常见问题
Spring MVC的主要组件有那些? spring mvc 在使用 DispatcherServlet 处理 web 请求的时候,会用到 spring 中的九大组件,以下是几个关键的组件: 1.Li ...
- Linux基础——操作系统
1. 操作系统(Operation System,OS) 操作系统作为接口的示意图 如果想在裸机上运行自己所编写的程序,就必须用机器语言书写程序如果计算机上安装了操作系统,就可以在操作系统上安装支持的 ...
- python的setattr可以直接给类设置属性!!!!而不是非要是对象
dynamic.py import unittest class MakeTestCases: testcases = None def make_test_func(self, case=None) ...
- Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'hive.DELETEME1643159643943' doesn't exist
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'hive.DELETEME1643159643 ...
- 如何让excel不转换科学技术法
使用场景: 业务部门从系统导出数据给开发人员,打开后数字全部变为科学计数法 参考文章:https://www.zhihu.com/question/20096750
- 在昇腾平台上对TensorFlow网络进行性能调优
摘要:本文就带大家了解在昇腾平台上对TensorFlow训练网络进行性能调优的常用手段. 本文分享自华为云社区<在昇腾平台上对TensorFlow网络进行性能调优>,作者:昇腾CANN . ...
- Linux & 标准C语言学习 <DAY11>
一.指针 1.什么是指针 指针是一种特殊的数据类型,使用指针可以定义指针变量,指针变量存储的是整形数据,该数据代表了内存的编号(地址),可以通过这个编号访问到对应的内存 ...