React動畫一般有三種方法實現從易到難爲:css
一、transition(CSS3自帶)html
二、animation(CSS3自帶)react
三、react-transition-group動畫庫(須要引入插件)css3
1、transition(CSS3自帶)app
一、用法示例:ide
.hide{ /*過渡動畫效果*/
opacity: 1; transition: all 1s ease-in; }
含義:透明度在1s內從0漸變爲1學習
二、transition其餘參數動畫
建議參考(http://www.runoob.com/cssref/css3-pr-transition.html)詳細學習this
transition-property | 指定CSS屬性的name,transition效果 |
transition-duration | transition效果須要指定多少秒或毫秒才能完成 |
transition-timing-function | 指定transition效果的轉速曲線 |
transition-delay | 定義transition效果開始的時候 |
三、區別transformspa
transform 屬性向元素應用 2D 或 3D 轉換。該屬性容許咱們對元素進行旋轉、縮放、移動或傾斜。因此,transform屬性只對元素進行變換,不會產生過渡效果。
建議參考(http://www.runoob.com/cssref/css3-pr-transform.html)詳細學習
2、animation(CSS3自帶)
一、用法示例:
.hide{
/*過渡動畫效果*/
animation: animation-name 2s ease-in forwards;
}
@keyframes animation-name {
0% {
opacity: 1;
color: red;
}
50% {
opacity: 0.5;
color: blue;
}
100%{
opacity: 0;
color: yellow;
}
}
animation相對於transition的好處是能夠一幀一幀的控制動畫,自由度更高。
3、react-transition-group動畫庫(須要引入插件)
一、爲何要用react-transition-group?
由於有一些動畫用animation和transition很難實現甚至不能實現,這時react-transition-group就很是必要啦
二、安裝react-transition-group庫
yarn add react-transition-group
三、官方文檔地址:http://reactcommunity.org/react-transition-group/(強烈建議必定要先打開這個文檔再繼續向下閱讀哦)
react-transition-group庫有三個可以使用的組件:
(1)主要使用CSSTransition(單標籤的動畫)和TransitionGroup(多標籤的動畫)
(2)Transition是更接近底層的動畫,當時用CSSTransition和TransitionGroup都不能實現須要的動畫時能夠考慮使用Transition
四、React使用示例:(核心部分均標藍)
js部分:
import React,{ Component , Fragment} from 'react';
// 引入react-transition-group動畫組件 import { CSSTransition,TransitionGroup } from 'react-transition-group';
class AppTra extends Component{
constructor(props){
super(props);
this.state = {
list:[]
};
this.handleAddItem = this.handleAddItem.bind(this);
}
handleAddItem(){
this.setState((prevState)=>{
return{
list: [...prevState.list,'666']
}
})
}
render(){
return (
// Fragment是佔位符
<Fragment>
<TransitionGroup> { this.state.list.map((item,index)=>{ return( <CSSTransition in={this.state.show} //動畫時間 timeout={1000} // 前綴名注意S classNames='fade' unmountOnExit onEntered={(el)=>{ el.style.color='blue' }} // 入場第一幀 appear={true} key={index} > <div>{item}</div> </CSSTransition> ) }) } <button onClick={this.handleAddItem}>toggle</button> </TransitionGroup>
</Fragment>
)
}
}
// 導出組件
export default AppTra
css部分:
/*入場動畫*/
.fade-enter, .fade-appear{
/*入場動畫執行的第一個時刻*/
opacity: 0;
}
.fade-enter-active, .fade-appear-active{
/*入場動畫執行的第二個瞬間一直到執行完成的時刻*/
opacity: 1;
transition: opacity 1s ease-in;
}
.fade-enter-done{
/*入場動畫執行完成以後*/
opacity: 1;
color: red;
}
/*出場動畫*/
.fade-exit{
opacity: 1;
}
.fade-exit-active{
opacity: 0;
transition: opacity 1s ease-in;
}
.fade-exit-done{
opacity: 0;
}
你們動手試試吧