React Transition Group官方过渡动画的使用

29 篇文章 0 订阅
25 篇文章 1 订阅

react官方提供了React Transition Group这个动画框架供开发者使用。https://reactcommunity.org/react-transition-group/

安装

npm install react-transition-group --save

引入

import {CSSTransition,TransitionGroup} from 'react-transition-group'

虽然是动画框架,但是还是要写动画样式的。

新建css文件并引入

.item-enter,.item-appear {
  opacity: 0;
}
.item-enter-active,.item-appear-active {
  opacity: 1;
  transition: opacity 1s ease-in;
}
.item-enter-done{
  opacity: 1;
}
.item-exit {
  opacity: 1;
}
.item-exit-active {
  opacity: 0;
  transition: opacity 1s ease-in;
}
.item-exit-done{
  opacity: 0;
}
import './style.css'

动画分为单个dom的动画和列表的动画操作略有差异

单个dom的动画如下,每个属性的对应的作用如下

<CSSTransition
          in={this.state.inputValue === ''}//动画开始的标志
          timeout={1000}//动画的时间
          classNames="item"//对应css名字中的第一个单词
          unmountOnExit//动画结束后dom被移除
          appear={true}//第一次展示到页面也有动画效果,并且css样式中要加入appear对应的样式名
          onEntered={(el) => {el.style.color="red"}}//入场动画执行结束要做的操作
        >
          <div>hello</div>
        </CSSTransition>

列表动画需要在单个dom的基础上多包裹一层TransitionGroup,通过事件改变增加state的list数组来更新视图,添加的数组成员都有相应的动画效果。

<TransitionGroup>      
          {
            this.state.list.map(function (item,index) {
              return (
                <CSSTransition
                  key={index}
                  timeout={1000}//动画的时间
                  classNames="item"//对应css名字中的第一个单词
                  unmountOnExit//动画结束后dom被移除
                  appear={true}//第一次展示到页面也有动画效果,并且css样式中要加入appear对应的样式名
                  onEntered={(el) => {el.style.color="red"}}//入场动画执行结束要做的操作
                >
                  <div>hello</div>
                </CSSTransition>
              )
            })
          }
        </TransitionGroup>

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React TransitionGroupReact 提供的一个组件,用于管理组件的进入和离开动画。它可以帮助我们实现一些比较复杂的动画效果,比如在列表中添加或删除元素时,让新元素平滑地进入,旧元素平滑地离开。 如果你想要实现异步赋值自动上下滚动的效果,可以使用 React TransitionGroup 结合 CSS 的方式来实现。具体的步骤如下: 1. 在组件的 state 中定义一个数组,用于存储需要显示的数据。 2. 在组件的 componentDidMount 方法中,使用定时器或者异步请求来更新这个数组,并且设置一个状态值 isScrolling 为 true,表示当前正在自动滚动。 3. 在组件的 componentDidUpdate 方法中,判断 isScrolling 是否为 true,如果是,则使用 React TransitionGroup 包裹一个滚动容器,并且使用 CSS 来实现自动滚动的效果。 4. 在 CSS 中定义一个动画,用于实现自动滚动的效果。可以使用 transform 和 transition 属性来实现。 下面是一个示例代码: ```jsx import React, { Component } from 'react'; import { TransitionGroup, CSSTransition } from 'react-transition-group'; class AutoScroll extends Component { state = { data: [], isScrolling: false, }; componentDidMount() { // 模拟异步请求数据 setTimeout(() => { this.setState({ data: ['数据1', '数据2', '数据3'], isScrolling: true }); }, 1000); } componentDidUpdate() { if (this.state.isScrolling) { // 自动滚动 this.scrollContainer.scrollTop = this.scrollContainer.scrollHeight; } } render() { const { data, isScrolling } = this.state; return ( <div className="scroll-container" ref={(node) => { this.scrollContainer = node; }} > <TransitionGroup> {data.map((item) => ( <CSSTransition key={item} timeout={500} classNames="fade"> <div>{item}</div> </CSSTransition> ))} </TransitionGroup> {isScrolling && ( <style> {` .scroll-container { height: 200px; overflow: hidden; } .fade-enter { transform: translateY(-100%); } .fade-enter-active { transform: translateY(0); transition: transform 500ms ease-in-out; } .fade-exit { transform: translateY(0); } .fade-exit-active { transform: translateY(100%); transition: transform 500ms ease-in-out; } `} </style> )} </div> ); } } export default AutoScroll; ``` 在这个示例中,我们使用TransitionGroup 和 CSSTransition,来实现进入和离开动画效果。在 CSS 中,我们定义了一个名为 fade 的动画,用于实现自动滚动的效果。通过 translateY 属性将元素移动到指定位置,并且使用 transition 属性来实现平滑过渡的效果。最后,在组件的 render 方法中,我们将滚动容器的 ref 绑定到 this.scrollContainer 上,以便在组件的 componentDidUpdate 方法中使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值