日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
面試官:在React中組件間過渡動畫如何實現(xiàn)?

本文轉(zhuǎn)載自微信公眾號「JS每日一題」,作者灰灰。轉(zhuǎn)載本文請聯(lián)系JS每日一題公眾號。

網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、微信小程序、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了沙縣免費建站歡迎大家使用!

一、是什么

在日常開發(fā)中,頁面切換時的轉(zhuǎn)場動畫是比較基礎的一個場景

當一個組件在顯示與消失過程中存在過渡動畫,可以很好的增加用戶的體驗

在react中實現(xiàn)過渡動畫效果會有很多種選擇,如react-transition-group,react-motion,Animated,以及原生的CSS都能完成切換動畫

二、如何實現(xiàn)

在react中,react-transition-group是一種很好的解決方案,其為元素添加enter,enter-active,exit,exit-active這一系列勾子

可以幫助我們方便的實現(xiàn)組件的入場和離場動畫

其主要提供了三個主要的組件:

  • CSSTransition:在前端開發(fā)中,結(jié)合 CSS 來完成過渡動畫效果
  • SwitchTransition:兩個組件顯示和隱藏切換時,使用該組件
  • TransitionGroup:將多個動畫組件包裹在其中,一般用于列表中元素的動畫

CSSTransition

其實現(xiàn)動畫的原理在于,當CSSTransition的in屬性置為true時,CSSTransition首先會給其子組件加上xxx-enter、xxx-enter-active的class執(zhí)行動畫

當動畫執(zhí)行結(jié)束后,會移除兩個class,并且添加-enter-done的class

所以可以利用這一點,通過css的transition屬性,讓元素在兩個狀態(tài)之間平滑過渡,從而得到相應的動畫效果

當in屬性置為false時,CSSTransition會給子組件加上xxx-exit和xxx-exit-active的class,然后開始執(zhí)行動畫,當動畫結(jié)束后,移除兩個class,然后添加-enter-done的class

如下例子:

 
 
 
 
  1. export default class App2 extends React.PureComponent { 
  2.  
  3.   state = {show: true}; 
  4.  
  5.   onToggle = () => this.setState({show: !this.state.show}); 
  6.  
  7.   render() { 
  8.     const {show} = this.state; 
  9.     return ( 
  10.        
  11.          
  12.           
  13.             in={show} 
  14.             timeout={500} 
  15.             classNames={'fade'} 
  16.             unmountOnExit={true} 
  17.           > 
  18.              
  19.            
  20.         
 
  •         toggle 
  •       
  •  
  •     ); 
  •   } 
  • 對應css樣式如下:

      
     
     
     
    1. .fade-enter { 
    2.   opacity: 0; 
    3.   transform: translateX(100%); 
    4.  
    5. .fade-enter-active { 
    6.   opacity: 1; 
    7.   transform: translateX(0); 
    8.   transition: all 500ms; 
    9.  
    10. .fade-exit { 
    11.   opacity: 1; 
    12.   transform: translateX(0); 
    13.  
    14. .fade-exit-active { 
    15.   opacity: 0; 
    16.   transform: translateX(-100%); 
    17.   transition: all 500ms; 

    SwitchTransition

    SwitchTransition可以完成兩個組件之間切換的炫酷動畫

    比如有一個按鈕需要在on和off之間切換,我們希望看到on先從左側(cè)退出,off再從右側(cè)進入

    SwitchTransition中主要有一個屬性mode,對應兩個值:

    • in-out:表示新組件先進入,舊組件再移除;
    • out-in:表示就組件先移除,新組建再進入

    SwitchTransition組件里面要有CSSTransition,不能直接包裹你想要切換的組件

    里面的CSSTransition組件不再像以前那樣接受in屬性來判斷元素是何種狀態(tài),取而代之的是key屬性

    下面給出一個按鈕入場和出場的示例,如下:

      
     
     
     
    1. import { SwitchTransition, CSSTransition } from "react-transition-group"; 
    2.  
    3. export default class SwitchAnimation extends PureComponent { 
    4.   constructor(props) { 
    5.     super(props); 
    6.  
    7.     this.state = { 
    8.       isOn: true 
    9.     } 
    10.   } 
    11.  
    12.   render() { 
    13.     const {isOn} = this.state; 
    14.  
    15.     return ( 
    16.        
    17.         
    18.                        timeout={500} 
    19.                        key={isOn ? "on" : "off"}> 
    20.           { 
    21.            
    22.             {isOn ? "on": "off"} 
    23.            
    24.         } 
    25.          
    26.        
    27.     ) 
    28.   } 
    29.  
    30.   btnClick() { 
    31.     this.setState({isOn: !this.state.isOn}) 
    32.   } 

    css文件對應如下:

      
     
     
     
    1. .btn-enter { 
    2.   transform: translate(100%, 0); 
    3.   opacity: 0; 
    4.  
    5. .btn-enter-active { 
    6.   transform: translate(0, 0); 
    7.   opacity: 1; 
    8.   transition: all 500ms; 
    9.  
    10. .btn-exit { 
    11.   transform: translate(0, 0); 
    12.   opacity: 1; 
    13.  
    14. .btn-exit-active { 
    15.   transform: translate(-100%, 0); 
    16.   opacity: 0; 
    17.   transition: all 500ms; 

    TransitionGroup

    當有一組動畫的時候,就可將這些CSSTransition放入到一個TransitionGroup中來完成動畫

    同樣CSSTransition里面沒有in屬性,用到了key屬性

    TransitionGroup在感知children發(fā)生變化的時候,先保存移除的節(jié)點,當動畫結(jié)束后才真正移除

    其處理方式如下:

    • 插入的節(jié)點,先渲染dom,然后再做動畫
    • 刪除的節(jié)點,先做動畫,然后再刪除dom

    如下:

      
     
     
     
    1. import React, { PureComponent } from 'react' 
    2. import { CSSTransition, TransitionGroup } from 'react-transition-group'; 
    3.  
    4. export default class GroupAnimation extends PureComponent { 
    5.   constructor(props) { 
    6.     super(props); 
    7.  
    8.     this.state = { 
    9.       friends: [] 
    10.     } 
    11.   } 
    12.  
    13.   render() { 
    14.     return ( 
    15.       
       
    16.          
    17.           { 
    18.             this.state.friends.map((item, index) => { 
    19.               return ( 
    20.                  
    21.                   
      {item}
       
    22.                  
    23.               ) 
    24.             }) 
    25.           } 
    26.          
    27.          this.addFriend()}>+friend 
    28.       
     
  •     ) 
  •   } 
  •  
  •   addFriend() { 
  •     this.setState({ 
  •       friends: [...this.state.friends, "coderwhy"] 
  •     }) 
  •   } 
  • 對應css如下:

      
     
     
     
    1. .friend-enter { 
    2.     transform: translate(100%, 0); 
    3.     opacity: 0; 
    4.  
    5. .friend-enter-active { 
    6.     transform: translate(0, 0); 
    7.     opacity: 1; 
    8.     transition: all 500ms; 
    9.  
    10. .friend-exit { 
    11.     transform: translate(0, 0); 
    12.     opacity: 1; 
    13.  
    14. .friend-exit-active { 
    15.     transform: translate(-100%, 0); 
    16.     opacity: 0; 
    17.     transition: all 500ms; 

    參考文獻

    • https://segmentfault.com/a/1190000018861018
    • https://mp.weixin.qq.com/s/14HneI7SpfrRHKtqgosIiA

    標題名稱:面試官:在React中組件間過渡動畫如何實現(xiàn)?
    網(wǎng)站鏈接:http://www.5511xx.com/article/dhcoeso.html