资讯专栏INFORMATION COLUMN

react-transition-group动画库Transition组件使用

gityuan / 2035人阅读

摘要:动画库这个库包括个组件,今天做项目刚好用到了组件,记录一下使用过程中的总结,另外两个组件用到了再做介绍。规定完成过渡效果需要多少秒或毫秒。规定速度效果的速度曲线。参考网址官方案例官网动画库的新写法

react-transition-group动画库

这个库包括3个组件:Transition,CSSTransition,TransitonGroup,今天做项目刚好用到了Transition组件,记录一下使用过程中的总结,另外两个组件用到了再做介绍。或者移步到react 官网动画库(react-transition-group)的新写法

CSS3的transition属性

该属性可以对元素里面的一个属性设置过渡动画,比如:transition: width 2s;

祥见:CSS3 transition 属性

transition-property 规定设置过渡效果的 CSS 属性的名称。

transition-duration 规定完成过渡效果需要多少秒或毫秒。

transition-timing-function规定速度效果的速度曲线。

transition-delay定义过渡效果何时开始。

Transition的属性

元素动画在出现和消失时各有3个阶段,可以为这些属性绑定自定义函数:

onEnter:进入(出现)开始时执行

onEntering:进入(出现)过程中执行

onEntered:进入(出现)结束执行

onExit:离开(消失)时执行

onExiting:离开(消失)过程中执行

onExited:离开(消失)结束执行

其他属性介绍:

addEndListener:属性可以监听出现的3个阶段执行完成或消失的3个阶段执行完成时执行该函数监听的自定义函数。

unmountOnExit:为true 代表退出的时候移除dom,也就是该元素dom动画执行完后直接删除该元素节点

appear:渲染的时候就直接执行动画,默认false

enter:设为true后,动画进入(出现)的三个阶段,前两个阶段onEnter,onEntering先执行,然后延迟一段时间再执行onEntered,可以简单的理解为动画进入(出现)时有个延迟

exit:设为true后,动画离开(消失)的三个阶段,前两个阶段onExit,onExiting先执行,然后延迟一段时间再执行onExited,可以简单的理解为动画离开(消失)时有个延迟

timeout:为上面的appear,enter,exit设置延迟时间

in:动画进入(出现),离开(消失)交替执行,点一下动画生效,再点一下动画失效

使用方法

标签可是设置上面那些属性。标签内容包裹一个箭头函数,该函数有一个参数state(参数名随意设置),返回值就是要实现动画效果的元素,该元素可以设置style样式。

案例一

此案例是我测试的案例,通过下拉框的透明度实现一个下拉框出现和消失的效果:

import React from "react";
import {connect} from "react-redux";
//受到路由管控
import {withRouter} from "react-router-dom";
import {Icon} from "antd";
//过渡动画
import Transition from "react-transition-group/Transition";
//duration设置延迟时间,下面的timeout属性使用
const duration = {
         appear:3000,
         enter: 3000,
         exit: 3000};
//默认样式
const  defaultStyle = {
        //ease-in-out规定以慢速开始和结束的过渡效果
        transition:`opacity ${3000}ms ease-in-out`,
        opacity:0,
    };
//过渡样式
const  transitionStyles = {
        //进入时2,3阶段动画,如果设置了延迟时间,会发现出现时立即透明度百分之"0.5",然后三秒后透明度才为"1"
        //因为延迟时间timeout属性设置的``enter:3000``会在第三阶段生效
        entering:{opacity: 0.5},
        entered:{opacity:1},
        //离开时2,3阶段
        exiting: {opacity: 0.5},
        exited: {opacity: 0}
    };

// 三个进入状态的事件,可以做你想做的事情
let onEnter = (node, isAppearing) => {
    console.log(isAppearing,node, "onEnter")
};
let onEntering = (node, isAppearing) => {
    console.log(isAppearing,node, "onEntering")
};
let onEntered = (node, isAppearing) => {
    console.log(isAppearing,node,"onEntered")
};

//测试动画执行过程,何时结束
let done =() => {
    console.log("结束了")
};

// 三个退出的状态的事件
let onExit = (node) => {
    console.log("onExit")
};
let onExiting = (node) => {
    console.log("onExiting")
};
let onExited = (node) => {
    console.log("onExited",node)
};

let addaddEndListener = (node) => { //原生时间transition运动的事件
    node.addEventListener("transitionend", this.done, false);
};

class NavTop extends React.Component{
    constructor(props,context){
        super(props,context);
        this.state = {
          in:false
        };
    }

    render() {
        return 
{/*首页导航*/}

大鱼资源网

{ this.setState({ in:!this.state.in }) }} />
{/*下拉条,过渡动画*/} { state => { //打印状态变化分别是onEnter,onEntering...等6种,通过此处可以看出延迟时间是在第三阶段生效,前两个阶段会立即执行 console.log(state,"###",{...defaultStyle, ...transitionStyles[state]}, "###"); return
  • 全部课程
  • react课程
  • vue课程
  • 小程序课程
} }
; } } export default withRouter(connect()(NavTop));

案例一结束。

案例二
//自己简单的封装了一个,该有的参数都由了,可以自行粘贴在自己的代码里面去试试。
class Fade extends React.Component {
  constructor(props) {
    super(props);
  }
  done =() => {
    // console.log("结束了")
  }
  addaddEndListener = (node) => { //原生时间transition运动的事件
    node.addEventListener("transitionend", this.done, false);
  }

  // 三个进入状态的事件,可以做你想做的事情
  onEnter = (node, isAppearing) => {
    console.log(isAppearing, "onEnter")
  }
  onEntering = (node, isAppearing) => {
    console.log(isAppearing, "onEntering")
  }
  onEntered = (node, isAppearing) => {
    console.log(isAppearing, "onEntered")
  }

  // 三个退出的状态的事件
  onExit = (node) => {
    console.log("onExit")
  }
  onExiting = () => {
    console.log("onExiting")
  }
  onExited = () => {
    console.log("onExited")
    this.props.self()
  }
  render() {
    const { in: inProp, dur} = this.props;
    const defaultStyle = {
      transition: `transform ${300}ms ease-in-out, opacity ${300}ms ease-in-out`,
      transform: "translateX(100px)",
      opacity: "0"
    }

    const transitionStyles = {
      entering: { transform: "translateX(100px)", opacity: "0"},
      entered:  { transform: "translateX(0px)", opacity: "1" },
      exiting: {transform: "translateX(0px)", opacity: "1"},
      exited: {transform: "translateX(0px)", opacity: "0"}
    };
    const duration = {
      enter: 300,
      exit: 300,
    }
    // 上面的都是基本参数,样式的转变以及时间的设定,具体的可以看官网文档
    // 样式也可以写成className 例如
    return (
      
        {
          state => {
            console.log(state, "###") //你可以很直观的看到组件加载和卸载时候的状态
            return(
              
{this.props.children}
) } }
); } }

案例二结束。

参考网址

官方案例

react官网动画库(react-transition-group)的新写法

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/114549.html

相关文章

  • react-transition-group画库Transition组件使用

    摘要:动画库这个库包括个组件,今天做项目刚好用到了组件,记录一下使用过程中的总结,另外两个组件用到了再做介绍。规定完成过渡效果需要多少秒或毫秒。规定速度效果的速度曲线。参考网址官方案例官网动画库的新写法 react-transition-group动画库 这个库包括3个组件:Transition,CSSTransition,TransitonGroup,今天做项目刚好用到了Transitio...

    charles_paul 评论0 收藏0
  • react 官网画库react-transition-group)的新写法

    摘要:一一个官网提供的动画过度库。安装而官方提供的三个组建。下面来看一个例子效果是增加和删除列表项中的一个,产生渐入渐失的效果说白了也就是多个或者组合的效果。 一、react-transition-group 一个官网提供的动画过度库。 搜索了网上关于react动画的,很多的答案都是很久以前的了老版本了,而现在官方提供的是叫react-transition-group 它是以前两个的合体版本...

    ky0ncheng 评论0 收藏0
  • 让React应用“”起来

    摘要:因为其组件只是根据提供的及属性,生成动画的数据,业务应用中拿到生成的数据后根据需要添加需要动画的组件样式。除了上述简单的动画应用,在复杂动画的实现方面,表现非常优越。 WEB应用中动画很重要 不管是web应用还是原生应用,也不论是PC端应用还是移动端应用,动画都扮演了一个重要的角色。 尽管动画并不会添加应用的实际动能,但一个好的动画,一个流畅且优雅,选择在恰当时机出现的动画,能为应用增...

    xiyang 评论0 收藏0
  • React画实现原理

    摘要:动画的实现原理要实现动画,究其根本,最终的落地依然是操作从而达到页面呈现动画的目的。 声明: 当前为草稿阶段。然后有人可以指引下怎么写草稿文章么~ web动画的实现原理 web动画的实现,最终都是需要操作dom。CSS动画,是给相应的dom元素添加动画className ; JS动画,则是通过定时器或其他手段,不断更改dom元素属性值,达到动画的目的。 React动画的实现原理 Re...

    mrli2016 评论0 收藏0
  • vue内置组件——transition简单原理图文详解

    摘要:在元素被插入之前生效,在元素被插入之后的下一帧移除。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。版及以上定义进入过渡的结束状态。 基本概念 Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如...

    lingdududu 评论0 收藏0

发表评论

0条评论

gityuan

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<