動畫是 ReactJs 應用程序中一個熱門話題,咱們有不少方法能夠建立不一樣類型的動畫。例如,不少開發人員就喜歡使用 css 動畫。但若是你想建立更復雜的動畫,你能夠關注 GreenSock 。GreenSock 是最具影響力的動畫平臺,同時,它給 React 提供了不少用於建立動畫的庫或組件。javascript
接下來,進入主題 😎。css
........................ ...👇 要查看回購,請單擊此處。👈 ...........................👆前端
固然,還有不少開源的動畫庫和組件,可是這篇文章不會涉及這些庫。java
👨💻讓咱們開始吧。react
這種方法是實現動畫的最簡單、最基礎的方式。你不須要導入 JavaScript 庫,而且瀏覽器花費的資源也是最少的。若是你須要實現一個簡單的動畫,並擔憂包的大小,可使用此方法。git
那麼,如何使用 css 作動畫喃? 咱們來看看左側菜單欄示例:👇github
這裏使用 css 屬性和 className="is-nav-open"
標籤實現側邊欄動畫。spring
CSS 有不少方法實現該效果,其中之一是在導航組件上建立一個容器組件,並在點擊時觸發 margin
的更改。導航欄有固定的寬度 250px
,容器組件的 margin-left
或 translateX
也擁有相同寬度。當咱們須要顯示導航欄時,咱們須要給容器組件設置 className="is-nav-open"
而且移動容器組件 margin-left/translateX: 0;
api
和 CSS 樣式:數組
在大多數狀況下,咱們都會使用 CSS 來建立動畫,由於它不須要在項目中導入大型庫來實現動畫,一般幾行 css 以及 className
標籤就能實現。
它是由 ReactJs 社區的人員開發的。ReactTransitionGroup 很容易實現基本的 CSS 動畫和過渡動畫。
開發人員將此庫描述爲:
「用於管理組件狀態(包括安裝和卸載)的一組組件,特別爲動畫而設計的。」
不管如何,關於它須要瞭解三件事:
讓咱們來看看如何製做相似的動畫👀👇
首先,你須要導入 CSSTransitionGroup
的 react-transition-group
。
而後你須要將列表包裝在其中並設置 transitionName
props。每當 CSSTransitionGroup
添加或刪除子項時,它將得到動畫樣式。
若是設置了 transitionName="example"
props,則樣式表中的類應以示例名稱開頭。
這就是 ReactTransitionGroup
的基本用法。👀
這就是你須要的一切。固然,你能夠添加一些邏輯。
咱們用兩種方法來實現咱們的示例聯繫人列表:
handleAdd
- 添加新的聯繫人,它得到一個隨機名稱並將其 push
到數組 state.items
。
handleRemove
- 經過 state.items
數組中的索引刪除聯繫人。
React-animations - 該庫是使用 animate.css 構建的全部動畫。它易於使用,並有不少動畫集合。React-animation 適用於任何支持使用對象定義關鍵幀動畫的內聯樣式庫,例如 Radium,Aphrodite 或樣式組件。我更喜歡使用樣式組件。
你能夠在gif上看到一些動畫:👀👇
我知道你的想法😄
一旦你看到這些動畫,你就會意識到你能夠在哪裏使用它們。 咱們來看看它是如何工做的。例如 - Bounce動畫。
第一件事就是導入動畫所需的 react-animations
。
正如我以前提到的,在使用動畫樣式和基本關鍵幀建立容器組件以後,我使用了樣式組件。
建立組件時,你須要包裝任何 HTML 或動畫組件。
例:
這個動畫就實現了,很容易,也很簡單。
這裏介紹一個處理滾動動畫很好的庫 - react-animate-on-scroll。
React Reveal 是 React 的動畫框架。它有如淡入淡出,翻轉,縮放,旋轉之類的基本動畫,也有不少高級動畫。它容許您使用 props
控制全部動畫,例如:位置,延遲,距離,級聯等等。你能夠在這裏看到它們。你還可使用自定義 CSS 效果。
它還具備服務器端渲染和高階組件。
若是你喜歡使用滾動動畫,推薦你使用它,接下里瞭解一下它是如何工做的。
讓咱們看看這個動畫的滾動效果。👀👇
咱們有5大塊,每塊都有一個全屏頁面和一個標題。
咱們創造 animateList
,該數組包含 5 個元素。使用數組方法 map
依次渲染 Fade
組件中的每一個元素併爲其插入標題。
Ant Design 是一個用於構建用戶界面的簡單易用的 React UI 組件庫。Ant Design 由阿里巴巴建立,而且被不少知名品牌使用,例如:阿里巴巴,騰訊,百度等等。
你可能已經據說過 Ant Design,咱們看一下其官網首頁上的動畫
如你所見,其中涉及不少動畫元素。咱們這裏只介紹一個簡單版本,由於全部元素都有相似的動畫。這裏我選擇了地球上的綠球和背景上的一個元素,例如紅色方塊。就像這樣。
在這個動畫中我使用了 TweenOne
組件,由於它須要在動畫中使用路徑,因此我使用了 PathPlugin
。當你將 PathPlugin
推送到 TweenOne.plugins
裏時,就會開啓動畫 。
下一步讓咱們看一下 Basic 動畫參數:
看一下樣例:
接下來咱們將建立一個動畫對象。該對象包含 3 種不一樣類型的動畫:
y
,持續時間 duration
和延遲 delay
。path
、持續時間 duration
、repeat
以及 ease
函數( TweenOne.easing.path
), 其中 TweenOne.easing.path
包含兩個參數:
你無需擔憂此代碼。你必須注意 TweenOne
組件。讓咱們簡單地提醒一下,這些組件都是從 rc-tween-one
中導入的,這個庫被用做基礎 props
和動畫 props
的基本組件。
每個 TweenOne
都有它本身的動畫規則 redSquare
,track
,greenBall
。
😄看起來嚇人。但事實上,你須要注意這些。
正如你所注意到的,使用此方法建立動畫是一種簡單的方法。你所須要作的只是描述動畫規則,並將它們傳輸到 TweenOne
組件。
常見動畫有不少種,不一樣的動畫咱們能夠採用不一樣的方法。今天咱們就介紹了幾種你能夠在項目中使用的方法。至於具體採用何種方法,須要參考具體場景👨💻
before 你在閱讀本文以前:
after 閱讀本文後:
😄請更優雅的使用動畫吧!
👇你還應該閱讀下一篇文章:👇
玩得開心,不斷學習,並始終保持編碼。 關注Medium&Linkedin。
若是你有任何問題或反饋,請點擊閱讀原文👇
下面你能夠看到一組流行的動畫庫列表。
ReactJs庫:
Javascript庫:
/ˈæn.ə.meɪ/
)是一個輕量級 JavaScript 動畫庫,具備簡單但功能強大的API。 它適用於 CSS 、SVG、DOM 屬性和 JavaScript 對象。本文翻譯自 medium.com/@dmitrynozh… Dmitry Nozhenko 大大的總結。
想看更過系列文章,點擊前往 github 博客主頁
1. ❤️玩得開心,不斷學習,並始終保持編碼。👨💻
2. 若有任何問題或更獨特的看法,歡迎評論或直接聯繫瓶子君(公衆號回覆 123 便可)!👀👇
3. 👇歡迎關注:前端瓶子君,每日更新!👇