中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

React總結篇之十_動畫

發布時間:2020-08-01 08:06:07 來源:網絡 閱讀:605 作者:cylcyl647308 欄目:web開發
  • 在網頁中動畫的實現方式
  • React提供的動畫輔助工具ReactCSSTransitionGroup
  • React-Motion動畫庫

一、動畫的實現方式
在網頁中,實現動畫無外乎兩種方式:

  • CSS3方式,也就是利用瀏覽器對CSS3原生支持實現動畫;
  • 腳本方式,通過間隔一段時間用JavaScript來修改頁面元素樣式來實現動畫。
  1. CSS3方式
    CSS3的方式下,開發者一般在CSS中定義一些包含CSS3transition語法的規則。在某些特定情況下,讓這些規則發生作用,于是瀏覽器會將這些規則應用于指定的DOM元素上,產生動畫的效果。這種方式效率比腳本方式高,因為瀏覽器原生支持,省去了JavaScript的解釋執行負擔,有的瀏覽器甚至可以充分利用CPU加速的優勢,進一步增強動畫渲染的性能。
    不過CSS3也有不少缺點:
    首先,CSS3transition對一個動畫規則的定義是基于時間和速度曲線的規則。就是CSS3的動畫過程要描述成“在什么時間范圍內,以什么樣的運動節奏完成動畫”,這可能不利于動畫的流暢,因為動畫是可能被中途打斷的。
    因為CSS3transition總是一閃而過,捕捉不到中間狀態,只能一遍一遍用肉眼去檢查動畫效果,這給開發者帶來了很大的痛苦。

  2. 腳本方式
    相對于CSS3方式,腳本方式最大的好處就是更強的靈活性,開發者可以任意控制動畫的時間長度,也可以控制每個時間點上動畫渲染的樣式,可以更容易做出豐富的動畫效果。
    腳本方式的缺點也很明顯,動畫過程通過JavaScript實現,不是瀏覽器原生支持,消耗的計算資源更多。

二、 ReactCSSTransition規則
Transition并不能代替CSS,相反,它離不開CSS,其扮演的角色是讓React組件在生命周期的特定階段使用不同的CSS規則,而連接React組件和CSS需要遵守一些規則。

  1. 類名規則
    配合TransitionGroup中的transitionName屬性,對應CSS規則中類名遵從統一的規則。類名由-符號把幾個單詞連接起來,除了transitionName的值,還可以有這幾個單詞:enter代表“裝載”開始時的狀態,leave代表“卸載”開始時的狀態,active代表動畫結束時的狀態。
    假設transitionName為sample,那么定制相關React組件的類名就是:
    • sample-enter
    • sample-enter-active
    • sample-leave
    • sample-leave-active
      其中active后綴類名的作用比較特殊,因為用CSS3的transition功能實現動畫,必須定義“開始狀態”和“結束狀態”,只有存在這兩個狀態,CSS3才知道如何將元素屬性從“開始狀態”在指定的時間按照指定的速度曲線轉換為“結束狀態”,這兩個狀態必須定義在兩個不同的CSS類中,否則CSS3無法區分。
  2. 動畫時間長度
    使用TransitionGroup,動畫的持續時間在兩個地方都要指定,第一個是在Transition-Group中以Timeout為結尾的屬性,第二個地方是在CSS文件中transition-duration規則。
  3. 裝載時機
    TransitionGroup要發揮作用,必須自身已經完成裝載了。因為Transition也只是一個React組件,功能只有在被裝載之后才能發揮。
  4. 首次裝載
    在Todo應用中,TransitionGroup自身被裝載的時候,可能已經包含了若干個TodoItem組件實例,但這些TodoItem組件雖然經歷了裝載過程,卻沒有動畫效果,只有在TransitionGroup被裝載之后新加入的TodoItem組件才有動畫效果。如果想讓這些子組件也有動畫效果,那就要使用appear過程,appear代表的就是隨TransitionGroup一起“出現”的過程。

三、React-Motion動畫庫
React-Motion使用的是腳本方式。
react-motion中大量的使用了“以函數為子組件”的模式,react-motion提供的組件,都預期接受一個函數作為子組件。舉例如下:
React總結篇之十_動畫
Motion組件的defaultStyle屬性指定了一個初始值,style屬性指定了目標值,期間不斷調用作為子組件的函數,完成動畫過程。
很顯然,motion并不直接參與動畫的繪制,它只是提供參數。具體的繪制過程,由作為子組件的繪制函數來完成,很顯然這種“以函數為子組件”的模式帶來了很大的靈活度。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泾阳县| 香格里拉县| 大石桥市| 手机| 澜沧| 新巴尔虎右旗| 应城市| 咸宁市| 旅游| 静宁县| 平昌县| 大悟县| 霸州市| 蓝山县| 图们市| 牡丹江市| 崇信县| 莒南县| 墨竹工卡县| 石棉县| 游戏| 常熟市| 扶沟县| 于田县| 巴林右旗| 三亚市| 黔南| 武山县| 务川| 丹寨县| 额敏县| 兴海县| 琼结县| 大荔县| 淮南市| 怀远县| 北宁市| 方山县| 永川市| 遂昌县| 金塔县|