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

窗口滚动事件

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

1. 添加滚动事件的监听/注销

  1. 1 //在componentDidMount,进行scroll事件的注册,绑定一个函数,让这个函数进行监听处理
  2. 2 componentDidMount() {
  3. 3 window.addEventListener('scroll', this.bindHandleScroll)
  4. 4 }
  5. 5 //在componentWillUnmount,进行scroll事件的注销
  6. 6 componentWillUnmount() {
  7. 7 window.removeEventListener('scroll', this.bindHandleScroll);
  8. 8 }
  9. 9 bindHandleScroll = (event) => {
  10. 10
  11. 11 }

2. 在state中添加参数,滚动页面时更新数据

更新参数后,设置样式。可以直接更新样式,也可以动态修改className然后在css文件中添加动态样式。

  1. 1 bindHandleScroll = (event) => {
  2. 2 // 滚动的高度
  3. 3 const scrollTop = event.srcElement.documentElement.scrollTop
  4. 4 || window.pageYOffset
  5. 5 || event.srcElement.body.scrollTop;
  6. 6 this.setState({
  7. 7 hasVerticalScrolled: scrollTop > 10
  8. 8 })
  9. 9 }
  10. 10 render() {
  11. 11 return (
  12. 12 <div className="header-container" style={{backgroundColor:this.state.hasVerticalScrolled?'#ffffff':'transparent'}}>
  13. 13 <div className="headerTitle-container">
  14. 14 <img className={`headerTitle${this.state.hasVerticalScrolled ? '-scrolled' : ''}`}></img>
  15. 15 </div>
  16. 16 </div>
  17. 17 );
  18. 18 }

完整Code:

  1. 1 import React, { Component } from 'react';
  2. 2 import './style.less';
  3. 3
  4. 4 interface PropsData {
  5. 5 }
  6. 6 interface StateData {
  7. 7 hasVerticalScrolled: boolean;
  8. 8 }
  9. 9
  10. 10 class Index extends Component<PropsData, StateData> {
  11. 11 constructor(props) {
  12. 12 super(props);
  13. 13 this.state = {
  14. 14 hasVerticalScrolled: false
  15. 15 };
  16. 16 }
  17. 17
  18. 18 //在componentDidMount,进行scroll事件的注册,绑定一个函数,让这个函数进行监听处理
  19. 19 componentDidMount() {
  20. 20 window.addEventListener('scroll', this.bindHandleScroll)
  21. 21 }
  22. 22 //在componentWillUnmount,进行scroll事件的注销
  23. 23 componentWillUnmount() {
  24. 24 window.removeEventListener('scroll', this.bindHandleScroll);
  25. 25 }
  26. 26 bindHandleScroll = (event) => {
  27. 27 // 滚动的高度
  28. 28 const scrollTop = event.srcElement.documentElement.scrollTop
  29. 29 || window.pageYOffset
  30. 30 || event.srcElement.body.scrollTop;
  31. 31 this.setState({
  32. 32 hasVerticalScrolled: scrollTop > 10
  33. 33 })
  34. 34 }
  35. 35 render() {
  36. 36 return (
  37. 37 <div className="header-container" style={{backgroundColor:this.state.hasVerticalScrolled?'#ffffff':'transparent'}}>
  38. 38 <div className="headerTitle-container">
  39. 39 <img className={`headerTitle${this.state.hasVerticalScrolled ? '-scrolled' : ''}`}></img>
  40. 40 </div>
  41. 41 </div>
  42. 42 );
  43. 43 }
  44. 44 }
  45. 45
  46. 46 export default Index;

容器内滚动

监听元素触发滚动

  1. 1 <div onScroll={exerciseContainerScrolled}>
  2. 2 </div>
  1. 1 const exerciseContainerScrolled = () => {
  2. 2 const exerciseContainerRoot = (document.getElementsByClassName('exercise-container') as HTMLCollectionOf<HTMLElement>)[0];
  3. 3 onScrollShowed(exerciseContainerRoot.scrollTop >= 200);
  4. 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. 【confluence】jira issue宏中如何把优先级图标转义成文字

    在confluece中,关于表格处理有2个非常好的插件. Table Filter and Charts for Confluence     (插件文档:https://docs.stiltsoft ...

  2. 微信小程序-实现微信登录

    业务流程: 1:首先需要一个按钮触发事件 2:调用微信小程序的登录接口wx.login,拿到code 3:调用微信小程序的获取用户信息的接口wx.getUserProfile,拿到用户的个人信息 4: ...

  3. TCP粘包和拆包

    假设客户端分别发送了两个数据包D1和D2给服务器,由于服务器一次读取的字节数是不确定的,故可能存在以下4中情况: 服务端分两次读到了两个独立的数据包D1和D2,没有粘包和拆包 服务端分一次收到两个数据 ...

  4. JMeter压测脚本实例:单接口

    新建测试计划 添加线程组 添加HTTP请求 配置该请求相关参数 1.请求头部信息 ①HTTP请求同级线程组下添加HTTP信息头部管理器 ②填充该请求所需的头部信息 2.请求体 选中之前增加的HTTP请 ...

  5. Linux shell usage()使用说明

    usage()类似于执行文件-help展示的内容,即告诉使用者有哪些参数选项可供使用. usage()格式 点击查看代码 #!/bin/bash usage() { echo "Usage: ...

  6. JAVA加载PMML算法模型

    注:加载失败时尝试修改pmml文件版本为4.3 依赖 <dependency> <groupId>org.jpmml</groupId> <artifactI ...

  7. BaseMapperX

    package cn.iocoder.yudao.framework.mybatis.core.mapper; import cn.iocoder.yudao.framework.common.poj ...

  8. Linux提权-权限升级

    特权升级是一段旅程.没有灵丹妙药,很大程度上取决于目标系统的具体配置.内核版本.已安装的应用程序.支持的编程语言.其他用户的密码是影响您通往 root shell 之路的几个关键因素 什么是特权升级? ...

  9. Google colab复现openpose+st-gcn的心路历程

    Google colab复现openpose+st-gcn的心路历程: 因为本人的大致研究方向为动作识别,加上自己的笔记本比较菜鸡,没有牛皮的显卡,所以采用了google的colab.在网上查了三天, ...

  10. Android笔记--图像显示

    imageView 具体实现: 注意:图片名称应当为小写的英文字母与数字的结合,当然,二者可以只存在其一 图片的放置的比例:(通过scaleType属性设置) ImageButton ImageBut ...