摘要:一一個官網(wǎng)提供的動畫過度庫。安裝而官方提供的三個組建。下面來看一個例子效果是增加和刪除列表項中的一個,產(chǎn)生漸入漸失的效果說白了也就是多個或者組合的效果。
一、react-transition-group 一個官網(wǎng)提供的動畫過度庫。
搜索了網(wǎng)上關(guān)于react動畫的,很多的答案都是很久以前的了老版本了,而現(xiàn)在官方提供的是叫react-transition-group 它是以前兩個的合體版本,所以寫下這個記錄一下,同時也給一些需要的猿門給一些小的提示。
1、安裝
# npm npm install react-transition-group --save # yarn yarn add react-transition-group
而官方提供的三個組建Transition,CSSTransition,TransitonGroup。
Transition過渡組件(Transiton)允許您用一個簡單的聲明性API描述隨著時間的推移從一個組件狀態(tài)到另一個組件狀態(tài)的轉(zhuǎn)換。最常用的是用來動畫一個組件的安裝和卸載,但也可以用來描述在適當?shù)倪^渡狀態(tài)。默認情況下,該組件不會更改其呈現(xiàn)的組件的行為,它只跟蹤組件的“進入”和“退出”的狀態(tài)。由你來為這些狀態(tài)定義效果。(翻譯)
實際的情況就是你如果只寫這個組件是沒有任何的效果的,就和你寫一個div一樣。所以你需要給他們賦予一些參數(shù)才可以。例如下面這個例子
//自己簡單的封裝了一個,該有的參數(shù)都由了,可以自行粘貼在自己的代碼里面去試試。 class Fade extends React.Component { constructor(props) { super(props); } done =() => { // console.log("結(jié)束了") } addaddEndListener = (node) => { //原生時間transition運動的事件 node.addEventListener("transitionend", this.done, false); } // 三個進入狀態(tài)的事件,可以做你想做的事情 onEnter = (node, isAppearing) => { console.log(isAppearing, "onEnter") } onEntering = (node, isAppearing) => { console.log(isAppearing, "onEntering") } onEntered = (node, isAppearing) => { console.log(isAppearing, "onEntered") } // 三個退出的狀態(tài)的事件 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, } // 上面的都是基本參數(shù),樣式的轉(zhuǎn)變以及時間的設(shè)定,具體的可以看官網(wǎng)文檔 // 樣式也可以寫成className 例如return ( { state => { console.log(state, "###") //你可以很直觀的看到組件加載和卸載時候的狀態(tài) return( ); } }{this.props.children}) } }
其中上面的狀態(tài)有四種:
entering entered exiting exited
組件的初始化狀態(tài)都停留在exited
上面就是寫的一個最基本的例子,下面是如何的調(diào)用
let num = 1; class Dnd extends React.Component { state = { ins: true, current: 1, dom:ceshi weizhi {num}} handle = (bool) => { this.setState({ test: !bool }) } end = () => { const that = this; num = num + 1; setTimeout(function () { that.setState({ test: true, dom:888888 {num}}) }, 500) } render () { const { location } = this.props const { test } = this.state; return () } } // 效果是每次點擊按鈕都會進行一次進場和出場的動畫。也可以自行衍生。 {this.state.dom}
這個組件大概就是這樣的,這樣適合寫一個tab類型的頁面,在切換的時候可以展示不同的domCSSTransition
此組件是在轉(zhuǎn)換的出現(xiàn)、進入、退出階段應(yīng)用一對類名(也就是className),靠這個來激活CSS動畫。所以參數(shù)和平時的className不同,參數(shù)為:classNames
參數(shù):(主要)in, timeout, unmountOnExit, classNames, 用法同Transition。看如下例子:
state = { star: false } ?
效果是點擊button 顯示星星,在點擊消失星星的動畫!
參數(shù)classNames="star", 組件會找對應(yīng)狀態(tài)的className, 如下
.star { display: inline-block; margin-left: 0.5rem; transform: scale(1.25); } .star-enter { opacity: 0.01; transform: translateY(-100%) scale(0.75); } .star-enter-active { opacity: 1; transform: translateY(0%) scale(1.25); transition: all 300ms ease-out; } .star-exit { opacity: 1; transform: scale(1.25); } .star-exit-active { opacity: 0; transform: scale(4); transition: all 300ms ease-in; }
依次執(zhí)行的順序是
1、星星顯示 對應(yīng)的class為star-enter star-enter-active 動畫走完為star-enter-done 2、星星消失 對應(yīng)的class為star-exit star-exit-active 動畫走完為star-exit-done
如果按照官網(wǎng)的解釋就是如下, 有興趣的可以自行去試一試。
classNames={{ appear: "my-appear", appearActive: "my-active-appear", enter: "my-enter", enterActive: "my-active-enter", enterDone: "my-done-enter, exit: "my-exit", exitActive: "my-active-exit", exitDone: "my-done-exit, }}
每個階段的鉤子函數(shù)同Transition.
TransitionGroup一看group就知道肯定是列表形態(tài)的動畫了!但是看了官網(wǎng)后知道,TransitionGroup不提供任何形式的動畫,具體的動畫取決與你包裹的Transition || CSSTransition的動畫,所以你可以在列表里面做出不同類型的動畫出來。下面來看一個例子
class List extends React.Component { constructor(props) { super(props); this.state = { items: [ { id: 1, text: "Buy eggs" }, { id: 2, text: "Pay bills" }, { id: 3, text: "Invite friends over" }, { id: 4, text: "Fix the TV" }, ] } } render() { const { items } = this.state; return (); } }{items.map(({ id, text }) => ( ))} {text}
css
.fade-enter { opacity: 0.01; } .fade-enter-active { opacity: 1; transition: opacity 500ms ease-in; } .fade-exit { opacity: 1; } .fade-exit-active { opacity: 0.01; transition: opacity 500ms ease-in; }
效果是增加和刪除列表項中的一個,產(chǎn)生漸入漸失的效果!說白了也就是多個Transition 或者CSSTransition組合的效果。
但是也提供一些參數(shù)
1、component default "div" 也就是TransitionGroup渲染出來的標簽為div,也可以就行更改,例如component="span" 渲染出來的就是span標簽了 2、children 相當于你給的組件,可以是字符串或者自定義組件等。 3、appear 寫在TransitionGroup里面相當于開啟或者禁止里面的Transition || CSSTransition 方便寫的作用
三個組件大概的特性就是這些。剩下的全靠自己去開發(fā)了!后續(xù)會錄入一些小的例子來講解,敬請期待。。。。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/95925.html
摘要:動畫庫這個庫包括個組件,今天做項目剛好用到了組件,記錄一下使用過程中的總結(jié),另外兩個組件用到了再做介紹。規(guī)定完成過渡效果需要多少秒或毫秒。規(guī)定速度效果的速度曲線。參考網(wǎng)址官方案例官網(wǎng)動畫庫的新寫法 react-transition-group動畫庫 這個庫包括3個組件:Transition,CSSTransition,TransitonGroup,今天做項目剛好用到了Transitio...
摘要:動畫庫這個庫包括個組件,今天做項目剛好用到了組件,記錄一下使用過程中的總結(jié),另外兩個組件用到了再做介紹。規(guī)定完成過渡效果需要多少秒或毫秒。規(guī)定速度效果的速度曲線。參考網(wǎng)址官方案例官網(wǎng)動畫庫的新寫法 react-transition-group動畫庫 這個庫包括3個組件:Transition,CSSTransition,TransitonGroup,今天做項目剛好用到了Transitio...
摘要:動畫的實現(xiàn)原理要實現(xiàn)動畫,究其根本,最終的落地依然是操作從而達到頁面呈現(xiàn)動畫的目的。 聲明: 當前為草稿階段。然后有人可以指引下怎么寫草稿文章么~ web動畫的實現(xiàn)原理 web動畫的實現(xiàn),最終都是需要操作dom。CSS動畫,是給相應(yīng)的dom元素添加動畫className ; JS動畫,則是通過定時器或其他手段,不斷更改dom元素屬性值,達到動畫的目的。 React動畫的實現(xiàn)原理 Re...
摘要:因為其組件只是根據(jù)提供的及屬性,生成動畫的數(shù)據(jù),業(yè)務(wù)應(yīng)用中拿到生成的數(shù)據(jù)后根據(jù)需要添加需要動畫的組件樣式。除了上述簡單的動畫應(yīng)用,在復雜動畫的實現(xiàn)方面,表現(xiàn)非常優(yōu)越。 WEB應(yīng)用中動畫很重要 不管是web應(yīng)用還是原生應(yīng)用,也不論是PC端應(yīng)用還是移動端應(yīng)用,動畫都扮演了一個重要的角色。 盡管動畫并不會添加應(yīng)用的實際動能,但一個好的動畫,一個流暢且優(yōu)雅,選擇在恰當時機出現(xiàn)的動畫,能為應(yīng)用增...
摘要:父組件向子組件之間非常常見,通過機制傳遞即可。我們應(yīng)該聽說過高階函數(shù),這種函數(shù)接受函數(shù)作為輸入,或者是輸出一個函數(shù),比如以及等函數(shù)。在傳遞數(shù)據(jù)的時候,我們可以用進一步提高性能。 本文主要談自己在react學習的過程中總結(jié)出來的一些經(jīng)驗和資源,內(nèi)容邏輯參考了深入react技術(shù)棧一書以及網(wǎng)上的諸多資源,但也并非完全照抄,代碼基本都是自己實踐,主要為平時個人學習做一個總結(jié)和參考。 本文的關(guān)鍵...
閱讀 713·2021-11-16 11:44
閱讀 3545·2019-08-26 12:13
閱讀 3240·2019-08-26 10:46
閱讀 2356·2019-08-23 12:37
閱讀 1187·2019-08-22 18:30
閱讀 2531·2019-08-22 17:30
閱讀 1840·2019-08-22 17:26
閱讀 2288·2019-08-22 16:20