react过渡动画效果的实现,react-transition-group
本文介绍react相关的过渡动画效果的实现
有点类似vue的transition组件,主要用于组件mount和unmount之前切换时应用动画效果
安装
cnpm install react-transition-group --save
transition动画
import React from 'react'
import ReactDOM from 'react-dom'
import Transition from 'react-transition-group/Transition';
const duration = 300;
const defaultStyle = {
transition: `opacity ${duration}ms ease-in-out`,
opacity: 0,
width: "100px",
height: "100px",
background: "red"
}
const transitionStyles = {
entering: { opacity: 0 },
entered: { opacity: 1 },
};
class MyComponent extends React.Component {
constructor() {
super();
this.state = {
in: false
}
}
toggleEnterState = () => {
this.setState({in: !this.state.in})
}
render() {
return (
<div>
<Transition in={this.state.in} timeout={1000} mountOnEnter={true} unmountOnExit={true}>
{(state) => (
<div style={{
...defaultStyle,
...transitionStyles[state]
}}>
I'm A fade Transition!
</div>
)}
</Transition>
<button onClick={this.toggleEnterState}>Click to Enter</button>
</div>
)
}
}
ReactDOM.render(
<MyComponent/>,
document.getElementById('root')
)
transition动画配套api
** children
指的是Transition标签包含的待应用动画的元素,可以使用react的元素,也可以直接用函数,函数可以接受state参数
state的代表动画的4个状态
entering
entered
exiting
exited
** in
应用于Transition标签上面,切换enter和exit,从而出现动画效果,布尔值
** mountOnEnter
在元素enter的时候才挂载,布尔值
** unmountOnExit
在元素exit的时候销毁,布尔值
** appear
默认情况下Transition初次挂载的时候不应用动画
设置为apear之后,会自动应用一次enter动画
布尔值
** enter
是否启用enter时候的动画,布尔值
作用和设置timeout为0一样
** exit
是否启用exit时候的动画,布尔值
作用和设置timeout为0一样
** timeout
过渡的持续时间,必须设置此值,除非addEventListener提供了
timeout = {500}或者
timeout = {{
enter: 300,
exit: 500
}}
** addEndListener
用来监听dom节点的transition结束事件
addEndListener = {
(node,done) => {
node.addEventListener('transitionend', function(){
alert(111);
});
done();
}
}
node是dom元素节点,done是切换状态的回调函数
** onEnter
用来监听 enter 状态的钩子函数
onEnter={
(node,isAppearing) => {console.log(node,isAppearing)
}
node是dom节点
isAppearing是appear属性值
另外 onEntering 和 onEntered用法类似
** onExit
用来监听 exit 状态开始触发的钩子函数
onExit={
(node) => {console.log(node)
}
另外 onExiting 和 onExited 用法类似
animate动画
** index.js
import React from 'react'
import ReactDOM from 'react-dom'
import { CSSTransition } from 'react-transition-group';
import './index.css';
const defaultStyle = {
width: "100px",
height: "100px",
background: "red"
}
class MyComponent extends React.Component {
constructor() {
super();
this.state = {
in: true
}
}
toggleEnterState = () => {
this.setState({in: !this.state.in})
}
render() {
return (
<div>
<CSSTransition in={this.state.in} timeout={500} classNames='bounceInLeft'>
{(state) => (
<div style={{
...defaultStyle
}}>
I'm A fade Transition!
</div>
)}
</CSSTransition>
<button onClick={this.toggleEnterState}>Click to Enter</button>
</div>
)
}
}
ReactDOM.render(
<MyComponent/>,
document.getElementById('root')
)
** index.css
@keyframes bounceInLeft {
from, 60%, 75%, 90%, to {
animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
}
0% {
opacity: 0;
transform: translate3d(-3000px, 0, 0);
}
60% {
opacity: 1;
transform: translate3d(25px, 0, 0);
}
75% {
transform: translate3d(-10px, 0, 0);
}
90% {
transform: translate3d(5px, 0, 0);
}
to {
transform: none;
}
}
@keyframes bounceOutRight {
20% {
opacity: 1;
transform: translate3d(-20px, 0, 0);
}
to {
opacity: 0;
transform: translate3d(2000px, 0, 0);
}
}
.bounceInLeft-enter{
animation: bounceInLeft 1s 1;
}
.bounceInLeft-exit{
animation: bounceOutRight 1s 1;
}
animate动画配套api
** classNames
用在CSSTransition标签上面,自动添加状态后缀名
classNames = "demo";
会依次应用 demo-enter,demo-enter-active,demo-exit,demo-exit-active,demo-appear,demo-appear-active
如果单独制定class的name的话可以使用如下
classNames = {{
appear: 'demo1',
appearActive: 'demo2',
enter: 'demo3',
enterActive: 'demo4',
exit: 'demo5',
exitActive: 'demo6'
}}
** onEnter
在enter或者appear类应用完成后立马调用回调函数
onEnter={
(node,isAppearing) => {console.log(node,isAppearing)}
}
** onEntering
在enter-active或者appear-active应用完成后立马调用回调函数
onEntering={
(node,isAppearing) => {console.log(node,isAppearing)}
}
** onEntered
在enter或者appear移除完成后立马调用回调函数
onEntered={
(node,isAppearing) => {console.log(node,isAppearing)}
}
** onExit
在exit类应用完成后立即调用回调函数
onEntered={
(node) => {console.log(node)}
}
** onExiting
在exit-active类应用完成后立即调用回调函数
onExiting={
(node) => {console.log(node)}
}
** onExited
在exit类移除后立即调用
onExited={
(node) => {console.log(node)}
}
TransitionGroup
专门处理列表动画而诞生的组件,只要在TransitionGroup中的元素减少或者增加,自动为Transition或者CSSTransition应用in属性
import React from 'react'
import ReactDOM from 'react-dom'
import Transition from 'react-transition-group/Transition';
import {TransitionGroup} from 'react-transition-group'
const duration = 300;
const defaultStyle = {
transition: `opacity ${duration}ms ease-in-out`,
opacity: 0,
width: "100px",
height: "100px",
background: "red"
}
const transitionStyles = {
entering: { opacity: 0 },
entered: { opacity: 1 },
};
class MyComponent extends React.Component {
constructor() {
super();
this.state = {
arr: ['a','c','d','e']
}
}
addItem = () => {
this.setState({
arr: this.state.arr.concat(['f'])
});
}
render() {
return (
<div>
<TransitionGroup component="span" appear>
{this.state.arr.map( (item,index) => (
<Transition key={index} timeout={0}>
{(state) => (
<div style={{
...defaultStyle,
...transitionStyles[state]
}}>
{item}
</div>
)}
</Transition>
) )}
</TransitionGroup>
<button onClick={this.addItem}>添加元素</button>
</div>
)
}
}
ReactDOM.render(
<MyComponent/>,
document.getElementById('root')
)
TransitionGroup配套api
** component
默认TransitionGroup是渲染成div,可以通过指定component改变这一默认行为
** appear
是否执行初次渲染enter动画
** enter
是否开启enter动画
** exit
是否开启exit动画
** childFactory
此函数是TransitionGroup将要展示子元素的拦截器
childFactory={(el) => {console.log(el);return el}}
react过渡动画效果的实现,react-transition-group的更多相关文章
- 067——VUE中vue-router之使用transition设置酷炫的路由组件过渡动画效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue过渡动画效果
1 过渡基础 1.1 过渡的方式 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果. 包括以下工具: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS ...
- React实现动画效果
流畅.有意义的动画对于移动应用用户体验来说是非常必要的.和React Native的其他部分一样,动画API也还在积极开发中,不过我们已经可以联合使用两个互补的系统:用于全局的布局动画LayoutAn ...
- 63、具有过渡动画效果的布局Layout
下面,下来看一个Demo的效果,代码如下: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android ...
- 64、具有过渡动画效果的布局Layout( 2 )
[ CoordinatorLayout-与手势完美结合的滑动视图 ] [ AppBarLayout-可以随手势滑动的AppBar ] <android.support.design.widget ...
- react中使用css动画效果
index.js import React, { Component, Fragment } from 'react'; class App extends Component { construct ...
- CSS中的变形、过渡、动画效果
一.变形 .过渡效果 1:元素平移 x方向 y方向 transform:translate(100px 100px); 2:过渡动画效果 a:什么属性参与过渡效果 b:过渡时间 c:过渡的效果 值包含 ...
- css动画效果之transition(动画过渡效果属性)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Vue.js 第3章 axios&Vue过渡动画
promise 它将我们从回调地狱中解脱出来 创建和使用 var fs = require('fs') // 创建promise // reslove表示执行成功后调用的回调函数 // reject表 ...
随机推荐
- 解析3级JSON的例子
我们都知道现在Ajax盛行,而且前后台数据交流的格式已经换成了JSON了.虽然我对这种做法还是有点担忧的,如果用户关闭了JavaScript怎么办?但是这些担忧还是不能阻止Ajax的盛行和JSON数据 ...
- phalcon查询:单条查询,多条查询,多表查询
单条查询, $order = \OrderMain::findFirst("oid='" . $oid . "'"); 多条查询, $shop = \Order ...
- Unity3D-UGUI图集打包与动态使用(TexturePacker)
参考地址: http://blog.csdn.net/cjsen/article/details/52487706 今天做项目大佬看我在做图集,就跟我说可以用工具打包图集,也就是TexturePack ...
- if 条件判断 和 判断总结---shell脚本
本文主要介绍了Shell脚本IF条件判断和判断条件总结,本文先是给出了IF条件判断的语法,然后给出了常用的判断条件总结,需要的朋友可以参考下. 前言: 无论什么编程语言都离不开条件判断.SHELL也不 ...
- Microsoft MVC3 框架
1. 安装MVC3框架 官网:http://www.asp.net/mvc 下载:ASP.NET MVC3 with Tools http://go.microsoft.com/fw ...
- 如何在阿里云上部署war包到tomcat服务器
一. 准备工作:xshell和xftp 首先我们得确保,xshell能够远程连接阿里云ECS,xftp能够保证windows和linux之间的文件传输(当然也可以选择FileZilla,但xftp感觉 ...
- Python爬虫之利用BeautifulSoup爬取豆瓣小说(一)——设置代理IP
自己写了一个爬虫爬取豆瓣小说,后来为了应对请求不到数据,增加了请求的头部信息headers,为了应对豆瓣服务器的反爬虫机制:防止请求频率过快而造成“403 forbidden”,乃至封禁本机ip的情况 ...
- 【Oracle】异常信息的加工处理
引言 很多时候,我们调用oracle存储过程都会发生各种各样的异常信息,例如ORA-12899值过大,ORA-01400不能插入空值等.虽然说这类异常是前端没控制到位的缘故,但是现实很难100 ...
- Git_学习_09_指定某些文件不上传
一.前言 在git提交文件到远程分支时,可能有些文件我们并不想上传. 这时可以使用如下命令来将这些文件从暂存区移除 git rm --cached "文件路径" 注:git add ...
- Spring_总结_04_高级配置(五)_运行时注入值
一.前言 本文承接上一节:Spring_总结_04_高级配置(四)_bean的作用域 当讨论依赖注入的时候,我们通常所讨论的是将一个bean引用注入到另一个bean的属性或者构造参数中.它通常指的是将 ...