精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:在React中組件間過渡動畫如何實現?

開發 前端
在react中實現過渡動畫效果會有很多種選擇,如react-transition-group,react-motion,Animated,以及原生的CSS都能完成切換動畫。

[[411396]]

本文轉載自微信公眾號「JS每日一題」,作者灰灰。轉載本文請聯系JS每日一題公眾號。

一、是什么

在日常開發中,頁面切換時的轉場動畫是比較基礎的一個場景

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

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

二、如何實現

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

可以幫助我們方便的實現組件的入場和離場動畫

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

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

CSSTransition

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

當動畫執行結束后,會移除兩個class,并且添加-enter-done的class

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

當in屬性置為false時,CSSTransition會給子組件加上xxx-exit和xxx-exit-active的class,然后開始執行動畫,當動畫結束后,移除兩個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.       <div className={'container'}> 
  11.         <div className={'square-wrapper'}> 
  12.           <CSSTransition 
  13.             in={show} 
  14.             timeout={500} 
  15.             classNames={'fade'
  16.             unmountOnExit={true
  17.           > 
  18.             <div className={'square'} /> 
  19.           </CSSTransition> 
  20.         </div> 
  21.         <Button onClick={this.onToggle}>toggle</Button> 
  22.       </div> 
  23.     ); 
  24.   } 

對應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先從左側退出,off再從右側進入

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

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

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

里面的CSSTransition組件不再像以前那樣接受in屬性來判斷元素是何種狀態,取而代之的是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.       <SwitchTransition mode="out-in"
  17.         <CSSTransition classNames="btn" 
  18.                        timeout={500} 
  19.                        key={isOn ? "on" : "off"}> 
  20.           { 
  21.           <button onClick={this.btnClick.bind(this)}> 
  22.             {isOn ? "on""off"
  23.           </button> 
  24.         } 
  25.         </CSSTransition> 
  26.       </SwitchTransition> 
  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發生變化的時候,先保存移除的節點,當動畫結束后才真正移除

其處理方式如下:

  • 插入的節點,先渲染dom,然后再做動畫
  • 刪除的節點,先做動畫,然后再刪除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.       <div> 
  16.         <TransitionGroup> 
  17.           { 
  18.             this.state.friends.map((item, index) => { 
  19.               return ( 
  20.                 <CSSTransition classNames="friend" timeout={300} key={index}> 
  21.                   <div>{item}</div> 
  22.                 </CSSTransition> 
  23.               ) 
  24.             }) 
  25.           } 
  26.         </TransitionGroup> 
  27.         <button onClick={e => this.addFriend()}>+friend</button> 
  28.       </div> 
  29.     ) 
  30.   } 
  31.  
  32.   addFriend() { 
  33.     this.setState({ 
  34.       friends: [...this.state.friends, "coderwhy"
  35.     }) 
  36.   } 

對應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

 

責任編輯:武曉燕 來源: JS每日一題
相關推薦

2021-07-05 11:06:11

組件React通信

2024-09-11 22:51:19

線程通訊Object

2023-11-20 10:09:59

2024-02-20 14:10:55

系統緩存冗余

2021-08-03 07:51:43

React項目面試

2021-06-29 09:47:34

ReactSetState機制

2021-07-06 07:27:45

React元素屬性

2022-02-09 09:37:54

ReactorNettyI/O

2024-10-22 16:39:07

2024-05-30 08:04:20

Netty核心組件架構

2024-01-26 13:16:00

RabbitMQ延遲隊列docker

2024-01-19 14:03:59

Redis緩存系統Spring

2024-04-09 10:40:04

2024-10-15 10:00:06

2021-09-14 07:06:13

React項目TypeScript

2015-08-13 10:29:12

面試面試官

2019-11-26 08:24:13

TCP擁塞控制網絡協議

2021-10-26 10:29:45

掃碼登錄功能

2021-05-20 08:34:03

CDN原理網絡

2024-09-09 15:09:30

點贊
收藏

51CTO技術棧公眾號

全部免费毛片在线播放一个| 亚洲区免费视频| 懂色av一区| 92精品国产成人观看免费| 日本一本a高清免费不卡| 一区二区伦理片| **国产精品| 精品国产成人在线| 亚洲精品免费在线看| 性生活视频软件| 久久裸体视频| 欧美成人免费va影院高清| 成人免费无码大片a毛片| 日韩欧国产精品一区综合无码| 亚洲一区二区视频| 日韩欧美亚洲在线| 三级网站在线看| 看片的网站亚洲| 69久久夜色精品国产69乱青草| 中国1级黄色片| 麻豆一区二区| 欧美一级在线免费| 手机看片福利盒子久久| 91豆花视频在线播放| 中国色在线观看另类| 国产精品制服诱惑| 懂色av蜜臀av粉嫩av喷吹| 今天的高清视频免费播放成人| 伊人一区二区三区久久精品| 国产高清成人久久| 国产一区二区三区亚洲综合| 91黄色免费看| 缅甸午夜性猛交xxxx| 黄色在线免费网站| 国产精品区一区二区三区| 精品国产免费久久久久久尖叫| av小说天堂网| 久久成人18免费观看| 国产成人精品av在线| 国产91av视频| 国产精品激情电影| 久久精品福利视频| 超碰人人干人人| 视频国产一区| 亚洲美女福利视频网站| 最新日本中文字幕| 日韩成人18| 日韩欧美亚洲国产精品字幕久久久 | 黄页网站大全在线观看| 中文字幕有码在线视频| 日韩一区欧美小说| 一区二区三区久久网| 二人午夜免费观看在线视频| 久久青草欧美一区二区三区| 久久riav二区三区| 日本精品久久久久| av福利精品导航| 国产欧美韩日| 天天操天天操天天干| www..com久久爱| 久久久国产精品一区二区三区| 欧美 日韩 综合| 91在线云播放| 欧美污视频久久久| wwwww在线观看免费视频| 亚洲国产精品精华液2区45| 视频一区视频二区视频三区视频四区国产 | 成人黄色理论片| 91精品国产综合久久久久久久 | 久久青草国产手机看片福利盒子| 精品国产乱码久久久久久久软件| 污视频在线免费观看| 久久综合精品国产一区二区三区| 欧美日韩一区综合| 18视频免费网址在线观看| 国产精品国产a级| 操bbb操bbb| 美女精品视频| 欧美午夜丰满在线18影院| av免费网站观看| 久久91超碰青草在哪里看| 欧美美女网站色| 成人啪啪18免费游戏链接| 久久亚州av| 国产亚洲一区精品| 国产精品免费在线视频| 午夜亚洲福利| 日本免费在线精品| 一区二区日韩视频| av成人免费在线| 日韩片电影在线免费观看| 日本免费在线视频| 亚洲成人资源网| www.超碰com| 一区二区三区在线免费看| 国产视频精品久久久| 免费看的黄色录像| 亚洲人www| 国产日韩在线精品av| 亚洲男女视频在线观看| 国产日韩欧美亚洲| 日本一级黄视频| 视频一区在线免费看| 日韩视频免费直播| 一级片手机在线观看| 91精品天堂福利在线观看| 51色欧美片视频在线观看| 一本色道久久综合精品婷婷| bt欧美亚洲午夜电影天堂| 一区二区成人国产精品| 美女视频在线免费| 欧美一区二区美女| 摸摸摸bbb毛毛毛片| 在线日韩中文| 成人性生交大片免费看小说 | 国产情侣呻吟对白高潮| 成人蜜臀av电影| 一区二区视频在线免费| 中国色在线日|韩| 欧美不卡123| 99成人在线观看| 久久久久久网| 韩国成人一区| 女同一区二区免费aⅴ| 欧美日韩国产bt| av网在线播放| 免费在线播放第一区高清av| 99高清视频有精品视频| 免费a级人成a大片在线观看| 欧美性猛交xxxx免费看| 97中文字幕在线观看| 欧美激情国产在线| 日本高清久久天堂| 欧美一区二区三区激情| 一区二区三区av电影| 天堂av手机在线| 99精品国产一区二区三区| 国产精品wwww| 日本v片在线免费观看| 亚洲成人av一区二区三区| 欧美激情第四页| 手机在线电影一区| 国产精品久久久久久久app | www.日本久久久久com.| 少妇一级淫片日本| 久久久综合精品| 欧美a v在线播放| 久久久精品国产**网站| 欧美激情一区二区三区高清视频| 99久久亚洲精品日本无码| 国产精品免费久久| 午夜免费福利视频在线观看| 久久密一区二区三区| 欧洲永久精品大片ww免费漫画| 污视频网站在线播放| 粉嫩av一区二区三区免费野| 污污免费在线观看| 在线一区欧美| 久久一区二区三区av| 免费亚洲电影| 一级做a爰片久久毛片美女图片| 无码人妻黑人中文字幕| 国产偷国产偷亚洲高清人白洁 | 久久久久久久99| 99在线精品免费| 国产中文字幕免费观看| 国产精品三级| 国产美女直播视频一区| 五月香视频在线观看| 欧美一级淫片007| 久久久久亚洲天堂| 99精品欧美一区二区三区综合在线| 夜夜添无码一区二区三区| 国内精品偷拍| 国模gogo一区二区大胆私拍| 日韩欧美亚洲另类制服综合在线| 91传媒视频免费| 欧美丰满艳妇bbwbbw| 国产精品中文有码| 久久这里只有精品8| 日韩区一区二| 午夜精品一区二区三区在线视频 | 国产+成+人+亚洲欧洲自线| 免费看毛片的网址| 亚洲欧美日本伦理| 国产在线精品成人一区二区三区| 成人短视频在线观看| 亚洲第一av在线| 天天干,天天干| 国产精品久久久久久久久晋中| 992kp免费看片| 伊人久久婷婷| 日本精品一区二区三区视频| 在线日韩三级| 97人人爽人人喊人人模波多| 二区在线观看| 亚洲第一视频网| 中文字幕777| 亚洲一区二区在线播放相泽| www.黄色在线| 国产激情一区二区三区四区| 国模吧无码一区二区三区| 日韩一级毛片| 国语精品中文字幕| 亚洲免费资源| 欧美亚洲视频在线观看| 成人毛片av在线| 亚洲精品视频在线观看视频| 91影院在线播放| 疯狂做受xxxx欧美肥白少妇| 亚洲不卡在线播放| 国产亚洲人成网站| 国产精品日日摸夜夜爽| 免费一级片91| aaa毛片在线观看| 欧美日韩国产色综合一二三四| 日韩区国产区| 嫩草国产精品入口| 51精品国产人成在线观看| 少妇一区视频| 91禁外国网站| 欧美hdxxx| 久久精品国产2020观看福利| 国产永久免费高清在线观看视频| 精品对白一区国产伦| 亚洲天堂中文字幕在线| 色综合久久久久网| 久久综合色综合| 亚洲黄色录像片| 人与动物性xxxx| 国产欧美日韩卡一| jizz日本免费| av在线播放成人| 国产精品99久久久精品无码| 国产伦精一区二区三区| 欧美日韩中文不卡| 日韩精彩视频在线观看| 亚洲色成人一区二区三区小说| 亚洲国产精品第一区二区| www.69av| 最新国产精品| 玖玖精品在线视频| 在线精品视频在线观看高清| 中日韩在线视频| 日韩国产综合| 亚洲国产一区二区三区在线播| 国产一区二区三区探花| 欧美日韩系列| 亚洲综合小说图片| 免费av一区二区三区| 全国精品免费看| 九九九久久久| 一区二区美女| 日韩免费电影一区二区| 第一会所sis001亚洲| 亚洲aⅴ天堂av在线电影软件| jizzjizz欧美69巨大| 综合国产在线观看| av黄色在线看| 欧美性jizz18性欧美| 国产区一区二区三| 色婷婷精品大在线视频| 国产一区免费看| 欧美丝袜丝交足nylons图片| 在线免费观看一区二区| 国产成人无遮挡在线视频| 精品亚洲一区二区三区四区五区高| 成人午夜大片| 久久99精品久久久久久秒播放器| 精品中国亚洲| 91国偷自产一区二区三区成为亚洲经典| 久久久99久久| 91国产美女在线观看| 韩日在线视频| 日韩在线观看免费全集电视剧网站 | 日本www在线| 久久成人综合视频| 91黄页在线观看| 国产精品第一第二| 自拍偷拍亚洲| 精品久久久久久一区| 国产成人高清| 手机在线视频你懂的| 亚洲国产日韩在线一区| 老司机一区二区| 国产伦精品一区二区三区妓女下载 | 一区二区三区成人在线视频| 黄色激情视频在线观看| 欧美视频完全免费看| 精品人妻一区二区三区日产乱码| 亚洲成色999久久网站| 成年人在线看| 欧美激情精品久久久久| 欧洲一级精品| 国产精品久久久久久久久婷婷| 国产不卡一二三区| 神马午夜伦理影院| 久久国产精品99国产| 天天综合成人网| 久久久久久久国产精品影院| 成年人一级黄色片| 色一情一乱一乱一91av| 精品国产一级片| 亚洲午夜小视频| 污视频在线免费观看网站| 日本视频久久久| 亚洲一区二区三区在线免费| 日韩区国产区| 亚洲综合国产激情另类一区| 99国产精品久久久久久| 久久久久国产精品麻豆ai换脸 | 日韩欧美一区二区在线| 99久久久国产精品无码免费| 国产亚洲人成a一在线v站| 国产桃色电影在线播放| 国产日韩欧美黄色| 国产不卡av一区二区| 日本午夜激情视频| 国产成人精品亚洲午夜麻豆| 一级片黄色录像| 日韩欧美一区二区三区| 亚洲黄色一级大片| 久久人人爽人人爽爽久久| 天然素人一区二区视频| 久久精品99久久| 精品成人久久| 日批视频在线看| 国产精品美女久久久久高潮| 中文字幕一区在线播放| 亚洲精品国精品久久99热| 婷婷av在线| 91久久久亚洲精品| 日韩精品首页| 午夜激情福利在线| 国产欧美一二三区| 成人免费毛片男人用品| 日韩av一区二区在线观看| 久草成色在线| 国产精品日韩欧美一区二区| 欧美日本一区二区视频在线观看| 一个色综合久久| 国产精品美女久久久久高潮| 中国一级片黄色一级片黄| 亚洲性生活视频| 制服诱惑亚洲| 日韩免费一区二区三区| 丝袜诱惑亚洲看片| 国产传媒久久久| 91精品日本| mm131午夜| 国产精品一级在线| 久久久久亚洲AV成人| 日韩一区二区在线观看视频播放| 午夜视频在线观看网站| 国产精品网站视频| 国产精品精品| 三年中文在线观看免费大全中国| 中文成人综合网| 国产精品一级二级| 欧美人与性动交| 久久影院资源站| 逼特逼视频在线| 国产欧美日韩久久| 国产日韩欧美中文字幕| 欧美大成色www永久网站婷| 免费一级欧美在线大片| 91动漫在线看| 91蜜桃传媒精品久久久一区二区| 国产91国语对白在线| 在线播放国产一区中文字幕剧情欧美 | 亚洲av少妇一区二区在线观看| 欧美国产视频日韩| 老牛国内精品亚洲成av人片| 国产主播在线看| 国产精品久久夜| 亚洲黄色在线播放| 国产不卡在线观看| 欧美残忍xxxx极端| 色悠悠在线视频| 91成人国产精品| 在线午夜影院| 久久综合九九| 精品在线观看免费| 国产精品成人久久| 在线播放精品一区二区三区| 国产精品一区免费在线| 浮妇高潮喷白浆视频| 中文字幕亚洲不卡| 成人久久精品人妻一区二区三区| 欧美中文在线免费| 亚洲成av人电影| 中国黄色a级片| 制服丝袜成人动漫| wwwwxxxx在线观看| 性欧美.com| av一区二区三区四区| 97人妻精品一区二区三区动漫| 久久99久国产精品黄毛片入口| 亚洲国产合集| 国产调教打屁股xxxx网站|