zoukankan      html  css  js  c++  java
  • React 监听页面滚动,界面动态显示

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

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

    //在componentDidMount,进行scroll事件的注册,绑定一个函数,让这个函数进行监听处理
    componentDidMount() {
    window.addEventListener('scroll', this.bindHandleScroll)
    }
    //在componentWillUnmount,进行scroll事件的注销
    componentWillUnmount() {
    window.removeEventListener('scroll', this.bindHandleScroll);
    }
    bindHandleScroll = (event) => {

    }

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

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

    bindHandleScroll = (event) => {
    // 滚动的高度
    const scrollTop = (event.srcElement ? event.srcElement.documentElement.scrollTop : false)
    || window.pageYOffset
    || (event.srcElement ? event.srcElement.body.scrollTop : 0);
    this.setState({
    hasVerticalScrolled: scrollTop > 10
    })
    }
    render() {
    return (
    <div className="header-container" style={{backgroundColor:this.state.hasVerticalScrolled?'#ffffff':'transparent'}}>
    <div className="headerTitle-container">
    <img className={`headerTitle${this.state.hasVerticalScrolled ? '-scrolled' : ''}`}></img>
    </div>
    </div>
    );
    }

    vi设计http://www.maiqicn.com 办公资源网站大全https://www.wode007.com

    完整Code: 

    import react, { Component } from 'react';
    import './style.less';

    interface PropsData {
    }
    interface StateData {
    hasVerticalScrolled: boolean;
    }

    class Index extends Component<PropsData, StateData> {
    constructor(props) {
    super(props);
    this.state = {
    hasVerticalScrolled: false
    };
    }

    //在componentDidMount,进行scroll事件的注册,绑定一个函数,让这个函数进行监听处理
    componentDidMount() {
    window.addEventListener('scroll', this.bindHandleScroll)
    }
    //在componentWillUnmount,进行scroll事件的注销
    componentWillUnmount() {
    window.removeEventListener('scroll', this.bindHandleScroll);
    }
    bindHandleScroll = (event) => {
    // 滚动的高度
    const scrollTop = (event.srcElement ? event.srcElement.documentElement.scrollTop : false)
    || window.pageYOffset
    || (event.srcElement ? event.srcElement.body.scrollTop : 0);
    this.setState({
    hasVerticalScrolled: scrollTop > 10
    })
    }
    render() {
    return (
    <div className="header-container" style={{backgroundColor:this.state.hasVerticalScrolled?'#ffffff':'transparent'}}>
    <div className="headerTitle-container">
    <img className={`headerTitle${this.state.hasVerticalScrolled ? '-scrolled' : ''}`}></img>
    </div>
    </div>
    );
    }
    }

    export default Index;
  • 相关阅读:
    Java实现二分图的最大权匹配
    Java实现二分图的最大权匹配
    Java实现二分图的最大权匹配
    Java实现二分图的最大权匹配
    Java实现二分图的最大权匹配
    Qt技术优势
    关于qtcreator+vs2008+CDB调试太卡的问题研究(载入符号表,以及VS调试器的注册表信息)
    用友的BS专用浏览器方案
    专访Rust——由Mozilla开发的系统编程语言(目标人群就是那些纠结的C++程序员,甚至也是他们自己)
    比较DirectX和OpenGL的区别(比较详细)
  • 原文地址:https://www.cnblogs.com/xiaonian8/p/13705126.html
Copyright © 2011-2022 走看看