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(); //滚 ...
随机推荐
- 【技术指北】通过SMB协议在iOS和Windows之间传输文件
windows操作 新建文件夹 设置文件夹的属性,选择共享 设置高级共享,权限选择完全控制 选择共享,选择Everyone cmd - ipcofig,获取ipv4地址 iOS操作 打开文件管理器 选 ...
- django orm的增删改查 以及django1.x和2.x的区别
ORM对字段的增删改查 # 建一个作者表 class Author(models.Model): ''' 如果你以后在创建表的时候,主键就叫id名,那么可以省略不写,orm会自动帮你创建出主键名称为i ...
- EF 操作实例
一.Linq语法 List操作 1.1 有参 public List<GoodsInfo> ShowInfo(string GName,int?Gid) { //true ...
- AttributeError: module 'torchvision' has no attribute 'transforms'
代码:maskrcnn-benchmark Python 3.6.13 |Anaconda, Inc Traceback (most recent call last): File "too ...
- vulnhub靶场之HARRYPOTTER: ARAGOG (1.0.2)
准备: 攻击机:虚拟机kali.本机win10. 靶机:HarryPotter: Aragog (1.0.2),下载地址:https://download.vulnhub.com/harrypotte ...
- topN算法问题
问题: 如何在10亿个整数中找出前1000个最大的数? 小顶堆堆排序 首先,我们需要构建一个大小为N(1000)的小顶堆,小顶堆的性质如下:每一个父节点的值都小于左右孩子节点,然后依次从文件中读取10 ...
- jQuery下载步骤以及相关使用
jQuery下载 进入相关网址执行下载操作,网址在这里:http://www.jq22.com/jquery-info122 进入页面之后,页面的左侧,会有这样的显示: 我们需要自主在这里选择自己需要 ...
- 对于实现上一篇遇到的问题——MyBatis+增删改查(已解决)
问题一:该Http不支持Get/Post方法 我根据网上的解决方法将Get和Post的位置来回换,还是不停报错: 后来偶然间看到一个博主发的"你的代码写在Get或者Post里面,就将没写代码 ...
- 在jsp页面int和String类型的相互转换
浅浅地来做一个对比吧! .java文件 int转成string类型:String s=String.valueOf(int m); String转成int类型:int m=Integer.parseI ...
- SpringBoot部署到外部Tomcat无法注册到Nacos服务端
事情经过 近期做一个项目投标演示(POC)环境支持,需要集成Nacos服务端.考虑到现有项目中已经有了Nacos相关依赖,那还不简单?新建个服务端,配置几下重启不就搞定了吗?然而事情远没有想得这么简单 ...