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;
  • 相关阅读:
    信步漫谈之Struts2—输入校验(编码方式)
    信步拾遗之Java反射机制浅析
    信步漫谈之Log4j—基础介绍
    Log4J基础详解及示例大全(转)
    设计模式之Bridge(桥接)(转)
    设计模式之Adapter(适配器)(转)
    设计模式之Facade(外观)(转)
    设计模式之Factory(工厂)(转)
    设计模式之Flyweight(享元)(转)
    基于CentOS7系统部署cobbler批量安装系统
  • 原文地址:https://www.cnblogs.com/xiaonian8/p/13705126.html
Copyright © 2011-2022 走看看