欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

react組件中過渡動畫的問題解決

 更新時間:2022年09月08日 08:30:31   作者:別救了這猴子廢了  
這篇文章主要為大家介紹了react組件中過渡動畫的問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

一、是什么

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

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

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

二、如何實現

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

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

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

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

CSSTransition

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

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

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

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

如下例子:

export default class App2 extends React.PureComponent {
  state = {show: true};
  onToggle = () => this.setState({show: !this.state.show});
  render() {
    const {show} = this.state;
    return (
      <div className={'container'}>
        <div className={'square-wrapper'}>
          <CSSTransition
            in={show}
            timeout={500}
            classNames={'fade'}
            unmountOnExit={true}
          >
            <div className={'square'} />
          </CSSTransition>
        </div>
        <Button onClick={this.onToggle}>toggle</Button>
      </div>
    );
  }
}

對應css樣式如下:

.fade-enter {
  opacity: 0;
  transform: translateX(100%);
}
.fade-enter-active {
  opacity: 1;
  transform: translateX(0);
  transition: all 500ms;
}
.fade-exit {
  opacity: 1;
  transform: translateX(0);
}
.fade-exit-active {
  opacity: 0;
  transform: translateX(-100%);
  transition: all 500ms;
}

SwitchTransition

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

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

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

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

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

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

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

import { SwitchTransition, CSSTransition } from "react-transition-group";
export default class SwitchAnimation extends PureComponent {
  constructor(props) {
    super(props);
    this.state = {
      isOn: true
    }
  }
  render() {
    const {isOn} = this.state;
    return (
      <SwitchTransition mode="out-in">
        <CSSTransition classNames="btn"
                       timeout={500}
                       key={isOn ? "on" : "off"}>
          {
          <button onClick={this.btnClick.bind(this)}>
            {isOn ? "on": "off"}
          </button>
        }
        </CSSTransition>
      </SwitchTransition>
    )
  }
  btnClick() {
    this.setState({isOn: !this.state.isOn})
  }
}

css文件對應如下:

.btn-enter {
  transform: translate(100%, 0);
  opacity: 0;
}
.btn-enter-active {
  transform: translate(0, 0);
  opacity: 1;
  transition: all 500ms;
}
.btn-exit {
  transform: translate(0, 0);
  opacity: 1;
}
.btn-exit-active {
  transform: translate(-100%, 0);
  opacity: 0;
  transition: all 500ms;
}

TransitionGroup

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

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

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

其處理方式如下:

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

如下:

import React, { PureComponent } from 'react'
import { CSSTransition, TransitionGroup } from 'react-transition-group';
export default class GroupAnimation extends PureComponent {
  constructor(props) {
    super(props);
    this.state = {
      friends: []
    }
  }
  render() {
    return (
      <div>
        <TransitionGroup>
          {
            this.state.friends.map((item, index) => {
              return (
                <CSSTransition classNames="friend" timeout={300} key={index}>
                  <div>{item}</div>
                </CSSTransition>
              )
            })
          }
        </TransitionGroup>
        <button onClick={e => this.addFriend()}>+friend</button>
      </div>
    )
  }
  addFriend() {
    this.setState({
      friends: [...this.state.friends, "coderwhy"]
    })
  }
}

對應css如下:

.friend-enter {
    transform: translate(100%, 0);
    opacity: 0;
}
.friend-enter-active {
    transform: translate(0, 0);
    opacity: 1;
    transition: all 500ms;
}
.friend-exit {
    transform: translate(0, 0);
    opacity: 1;
}
.friend-exit-active {
    transform: translate(-100%, 0);
    opacity: 0;
    transition: all 500ms;
}

以上就是react組件中過渡動畫的問題解決的詳細內容,更多關于react組件過渡動畫 的資料請關注腳本之家其它相關文章!

相關文章

  • react+antd動態(tài)增刪表單方式

    react+antd動態(tài)增刪表單方式

    這篇文章主要介紹了react+antd動態(tài)增刪表單方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Rect Intersection判斷兩個矩形是否相交

    Rect Intersection判斷兩個矩形是否相交

    這篇文章主要為大家介紹了Rect Intersection判斷兩個矩形是否相交的算法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • React18系列reconciler從0實現過程詳解

    React18系列reconciler從0實現過程詳解

    這篇文章主要介紹了React18系列reconciler從0實現過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • React18系列commit從0實現源碼解析

    React18系列commit從0實現源碼解析

    這篇文章主要為大家介紹了React18系列commit從0實現源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • React Hooks如何主動更新Hooks組件

    React Hooks如何主動更新Hooks組件

    這篇文章主要介紹了React Hooks如何主動更新Hooks組件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • react高階組件經典應用之權限控制詳解

    react高階組件經典應用之權限控制詳解

    在React中,高階組件是重用組件邏輯的一項高級技術。下面這篇文章主要給大家介紹了關于react高階組件經典應用之權限控制的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-09-09
  • 詳解在React里使用

    詳解在React里使用"Vuex"

    本篇文章主要介紹了詳解在React里使用"Vuex",小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • React+Antd+Redux實現待辦事件的方法

    React+Antd+Redux實現待辦事件的方法

    這篇文章主要介紹了React+Antd+Redux實現待辦事件的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • react父組件調用子組件的方式匯總

    react父組件調用子組件的方式匯總

    在react中常用props實現子組件數據到父組件的傳遞,但是父組件調用子組件的功能卻不常用,下面這篇文章主要給大家介紹了關于react父組件調用子組件的相關資料,需要的朋友可以參考下
    2022-08-08
  • React錯誤邊界Error Boundaries

    React錯誤邊界Error Boundaries

    錯誤邊界是一種React組件,這種組件可以捕獲發(fā)生在其子組件樹任何位置的JavaScript錯誤,并打印這些錯誤,同時展示降級UI,而并不會渲染那些發(fā)生崩潰的子組件樹
    2023-01-01

最新評論