以下是常见的监听滚动以及相应的操作

窗口滚动事件

当页面滚动时,如何动态切换布局/样式

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 };

onscroll 事件

React 监听页面滚动,界面动态显示的更多相关文章

  1. react 监听页面滚动

    html: // 如果使用typescript, 定义dom类型 private dom: HTMLDivElement | null // ReactJS中,对Div监听只需要绑定 onScroll ...

  2. vue中监听页面滚动和监听某元素滚动

    ①监听页面滚动 在生命周期mounted中进行监听滚动: mounted () { window.addEventListener('scroll', this.scrollToTop) }, 在方法 ...

  3. vue 中监听页面滚动

    监听页面滚动 在methods中定义一个方法 handleScroll() { //获取滚动时的高度 let scrollTop = window.pageYOffset || document.do ...

  4. 原 JQuery监听页面滚动总结

    1.当前滚动的地方的窗口顶端到整个页面顶端的距离: var winPos = $(window).scrollTop(); 2.获取指定元素的页面位置: $(val).offset().top; 3. ...

  5. JQuery监听页面滚动总结

    1.当前滚动的地方的窗口顶端到整个页面顶端的距离: var winPos = $(window).scrollTop(); 2.获取指定元素的页面位置: $(val).offset().top; 3. ...

  6. ionic 监听页面滚动,点击停止滚动

    类似今日头条,页面上有很多card,点击每个card跳转该card的详情页面.这里有一个问题,当我滚动页面时,会先后触发touchstart.touchmove.touchend,但是当touchen ...

  7. JS监听页面滚动到底部事件

    废话不说,直接上代码,放心我这个是最好的,直接放到js脚本里,直接生效: $(window).scroll(function(){ var scrollTop = $(this).scrollTop( ...

  8. js-监听页面滚动

    两种监听页面滚动的方法 一.原生js通过window.onscroll监听 window.onscroll = function() { //为了保证兼容性,这里取两个值,哪个有值取哪一个 //scr ...

  9. uni-app中不使用scroll-view组件,监听页面滑直底部事件

    最终达到的目标效果 将要用到 监听页面滚动事件:onPageScroll 获取节点信息uni.createSelectorQuery() 标签布局 <template> <view ...

  10. jq监听页面的滚动事件,

    jQuery监听页面的滚动状态,实现代码: $(document).scroll(function() {       var scroH = $(document).scrollTop(); //滚 ...

随机推荐

  1. Windows安装使用Chocolatey 包软件管理(类似 rpm , yum, brew , apt-get 包管理器工具)

    Windows也能像Linux或者Mac那样命令行安装管理软件了,,,真的太方便了 下载安装 使用window powershell 用管理员运行 Set-ExecutionPolicy Bypass ...

  2. 6 Sampling Configuration Space: 6.4 Adaptive Steered Molecular Dynamics

    6.4 Adaptive Steered Molecular Dynamics 理论背景: SMD 利用施加steering力的伪粒子,以便以特定速度穿过反应坐标. 这个外力允许人们在MD模拟时间尺度 ...

  3. Navicat Premium 12安装包下载及安装

    Navicat Premium 12安装包下载及安装 安装成功了 前提:这个好像是64位的,32位的电脑 我不知道行不行没有试过 1.发邮件17673114272@163.com获取资源后    解压 ...

  4. 服务器中VirtualBox子网访问

    本人常用的虚拟机软件是VirtualBox,由于笔记本性能,磁盘存储大下限制,以及VirtualBox客户机无法在多个设备间直接方便的使用等原因,我把几个虚拟的系统全部移动到便携式服务器中. 移动之后 ...

  5. OO多项式求导作业总结

    一.程序分析 1.1第一次作业 第一次作业是简单的多项式求导,甚至没有括号嵌套.但是,就是这个在如今看来如此简单的作业,由于俺寒假过于起飞,pre没做,正则表达式也不会(属实拉跨),一度想用c语言字符 ...

  6. jdk8 stream部分排序方法

    List<类> list; 代表某集合   //返回 对象集合以类属性一升序排序   list.stream().sorted(Comparator.comparing(类::属性一)); ...

  7. 【故障公告】cc攻击又来了,雪上加霜的三月

    非常非常抱歉!今天 21:20-22:10 左右,肆无忌惮的 cc 攻击又来了,蓄意攻击者很厉害,躲过阿里云云盾的黑洞机制,轻松击垮园子的博客站点,又给大家带来了很大的麻烦,请大家谅解! 今年3月是园 ...

  8. 记一次 .NET某汽车零件采集系统 卡死分析

    一:背景 1. 讲故事 前段时间有位朋友在微信上找到我,说他的程序会出现一些偶发卡死的情况,让我帮忙看下是怎么回事,刚好朋友也抓到了dump,就让朋友把 dump 丢给我,接下来用 windbg 探究 ...

  9. PMP常见会议小结

    转载请注明出处: 会议是吸引项目团队和其他干系人参与的重要方式.它们是整个项目的主要沟通方式. 一. 项目启动会 召开时间:是启动阶段结束时召开的会议. 主要任务:发布项目章程,并任命项目经理,赋予项 ...

  10. Django笔记五之字段类型

    这篇笔记介绍字段的类型 Field Type. Django 的model 下的 field 对应的是 MySQL 中的表字段,而我们定义的 field 的类型则对应 MySQL 中的字段类型. 本次 ...