Framer Motion簡介

Framer Motion 是什么?
在這里插入圖片描述

Framer Motion 是一個 用于 React 的現代動畫庫,專為創建流暢、高性能且富有表現力的動畫而設計。它不僅適合簡單的 UI 動效,也能優雅地實現復雜的動畫編排與手勢交互。


🚀 為什么選擇 Framer Motion?

? 簡單易用

使用 motion 組件 + 一點屬性配置,即可輕松實現動畫,無需寫復雜的 DOM 操作或 CSS 動畫。

? 聲明式動畫

通過設置 initialanimateexit 等屬性直接聲明動畫的狀態轉換,邏輯清晰、可讀性強。

? 高性能

底層采用 requestAnimationFrame 和優化的渲染方式,確保動畫流暢不卡頓。

? 手勢交互

內置手勢支持(拖拽、縮放、輕掃等),無需額外引入庫。

? 與 React 深度集成

原生 React 體驗,不破壞組件結構,支持 SSR,適配 Next.js 等框架。

? SVG 動畫支持

直接對 SVG 元素進行路徑、變形、旋轉等動畫控制。


🧠 核心概念

🧩 motion 組件

motion.divmotion.buttonmotion.svg 等是具有動畫能力的組件。你可以將任何 HTML 或 SVG 元素變為 motion 版本:

import { motion } from 'motion/react';<motion.div animate={{ opacity: 1 }} />

? 動畫屬性詳解

🔧 動畫屬性(Attributes)

通過 motion 組件設置以下屬性來定義動畫行為:

屬性名說明
initial初始狀態
animate動畫目標狀態
exit卸載動畫狀態(搭配 AnimatePresence 使用)
transition動畫的過渡控制參數
variants預設的動畫狀態組
whileHover鼠標懸停時的動畫
whileTap鼠標按下時的動畫
drag啟用拖拽功能

🕓 transition

控制動畫的速度和節奏:

transition={{duration: 0.5,ease: 'easeInOut',delay: 0.2,type: 'spring'
}}
  • duration: 動畫持續時間(單位秒)
  • ease: 緩動函數(如 'linear', 'easeOut',或自定義)
  • delay: 延遲執行
  • type: 動畫類型(如 'spring', 'tween', 'inertia'

🧬 variants

將多個動畫狀態預設為對象,可以統一切換:

const variants = {hidden: { opacity: 0, x: -100 },visible: { opacity: 1, x: 0 }
};<motion.divvariants={variants}initial="hidden"animate="visible"
/>

🎛 useMotionValue

控制并追蹤某個值的變化,如滾動、位置等:

const x = useMotionValue(0);
<motion.div style={{ x }} />

🔁 useTransform

將 motion 值進行映射和變換:

const opacity = useTransform(x, [0, 100], [0, 1]);

📦 AnimatePresence

控制組件的掛載與卸載時的動畫,特別適合動畫列表、彈窗等場景:

<AnimatePresence>{isVisible && (<motion.div exit={{ opacity: 0 }} />)}
</AnimatePresence>

🔍 示例代碼

import { motion } from 'motion/react';export default function Example() {return (<motion.divinitial={{ opacity: 0, scale: 0.8 }}animate={{ opacity: 1, scale: 1 }}transition={{ duration: 0.5 }}whileHover={{ scale: 1.1 }}whileTap={{ scale: 0.95 }}>Hello Framer Motion!</motion.div>);
}

📚 小結

Framer Motion 是 React 中最現代、最強大的動畫解決方案之一,適合構建復雜的用戶界面和微交互。它 API 簡潔、性能優秀、社區活躍,是前端開發者提升界面體驗的不二之選。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75869.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75869.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75869.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

多種方案對比實現 Kaggle 比賽介紹進行行業分類

Kaggle 平臺匯集了大量來自不同行業的數據科學競賽&#xff0c;但這些比賽的標題或簡介往往表述多樣、不易直接歸類。無論是做項目歸檔、行業研究&#xff0c;還是搭建競賽推薦系統&#xff0c;都需要一個可靠的方法來將比賽自動歸入對應行業標簽。 本教程提供使用 HuggingFac…

Android Jni(二)加載調用第三方 so 庫

文章目錄 Android Jni&#xff08;二&#xff09;加載調用第三方 so 庫前置知識CPU架構 ABI 基本步驟1、將第三方 SO 庫文件放入項目中的正確位置&#xff1a;2. 創建 JNI 接口3. 實現 JNI 層代碼4、配置 CMake 常見問題解決1、UnsatisfiedLinkError&#xff1a;2、函數找不到&…

服務器本地搭建

socket函數 它用于創建一個新的套接字&#xff08;socket&#xff09;。 函數原型 #include <sys/socket.h> int socket(int domain, int type, int protocol);參數解釋 domain&#xff1a;它指定了通信所使用的協議族&#xff0c;常見的取值如下&#xff1a; AF_INET…

MIP-Splatting:全流程配置與自制數據集測試【ubuntu20.04】【2025最新版】

一、引言 在計算機視覺和神經渲染領域&#xff0c;3D場景重建與渲染一直是熱門研究方向。近期&#xff0c;3D高斯散射&#xff08;3D Gaussian Splatting&#xff09;因其高效的渲染速度和優秀的視覺質量而受到廣泛關注。然而&#xff0c;當處理大型復雜場景時&#xff0c;這種…

Redis 高可用集群搭建與優化實踐

在分布式系統中,緩存技術用于提升性能和響應速度。 Redis 作為一款高性能的鍵值存儲系統,廣泛應用于緩存、消息隊列和會話管理等場景。隨著業務規模的擴大,單機 Redis 的性能和可用性逐漸無法滿足需求。 因此,搭建高可用的 Redis 集群可以解決這一問題。我將詳細介紹 Red…

專題十五:動態路由——BGP

一、BGP的基本概念 BGP&#xff08;Border Gateway Protocol&#xff0c;邊界網關協議&#xff09;是一種用于在不同自治系統&#xff08;AS&#xff09;之間交換路由信息的外部網關協議&#xff08;EGP&#xff09;。通過TCP179端口建立連接。目前采用BGP4版本&#xff0c;IP…

【Flask開發】嘿馬文學web完整flask項目第4篇:4.分類,4.分類【附代碼文檔】

教程總體簡介&#xff1a;2. 目標 1.1產品與開發 1.2環境配置 1.3 運行方式 1.4目錄說明 1.5數據庫設計 2.用戶認證 Json Web Token(JWT) 3.書架 4.1分類列表 5.搜索 5.3搜索-精準&高匹配&推薦 6.小說 6.4推薦-同類熱門推薦 7.瀏覽記錄 8.1配置-閱讀偏好 8.配置 9.1項目…

在Mac上離線安裝k3s

目錄 首先是安裝multipass。 1. 系統要求 2. 環境準備 本來想照著網上文檔學習安裝一下k3s&#xff0c;沒想到在docker被封了之后&#xff0c;現在想通過命令行去下載github的資源也不行了&#xff08;如果有網友看到這個文檔、并且知道問題原因的&#xff0c;請留言告知&am…

vscode+wsl 運行編譯 c++

linux 的 windows 子系統&#xff08;wsl&#xff09;是 windows 的一項功能&#xff0c;可以安裝 Linux 的發行版&#xff0c;例如&#xff08;Ubuntu&#xff0c;Kali&#xff0c;Arch Linux&#xff09;等&#xff0c;從而可以直接在 windows 下使用 Linux 應用程序&#xf…

基于源碼分析 HikariCP 常見參數的具體含義

HikariCP 是目前風頭最勁的 JDBC 連接池&#xff0c;號稱性能最佳&#xff0c;SpringBoot 2.0 也將 HikariCP 作為默認的數據庫連接池。 要想用好 HikariCP&#xff0c;理解常見參數的具體含義至關重要。但是對于某些參數&#xff0c;盡管官方文檔給出了詳細解釋&#xff0c;很…

docker部署scylladb

創建存儲數據的目錄和配置目錄 mkdir -p /root/docker/scylla/data/data /root/docker/scylla/data/commitlog /root/docker/scylla/data/hints /root/docker/scylla/data/view_hints /root/docker/scylla/conf快速啟動拷貝配置文件 docker run -d \--name scylla \scylladb/…

golang 在windows 系統的交叉編譯

基本交叉編譯命令 GOOS目標操作系統 GOARCH目標架構 go build -o 輸出文件名 包路徑 編譯 Linux 64位程序 set GOOSlinux set GOARCHamd64 go build -o myapp-linux main.go 編譯 MacOS (Darwin) 64位程序 set GOOSdarwin set GOARCHamd64 go build -o myapp-macos main.go …

本地mock服務編寫

確認有需要mock的接口文檔后&#xff0c;本地可以mock服務編寫&#xff1b; 用于測試UI事務、模擬對接組件等&#xff1b; 使用python FLASK可以輕松建立本地mock服務端&#xff0c;注冊預期的接口響應&#xff01;flask會在接收端持續打印收到的請求&#xff01; 注意&#…

京東云智能體平臺joybuilder v3.0.0測試

平臺介紹&#xff1a; JoyBuilder 是京東云推出的 AI 原生應用開發平臺&#xff0c;以下是對它的具體介紹&#xff1a; 開發方式便捷高效&#xff1a;將 AI 能力融入低代碼平臺&#xff0c;用戶通過對話式交互方式&#xff0c;輸入如 “創建客戶反饋管理系統” 等需求&#x…

前端實現對接現成文件下載接口(xlsx)

針對于Ant Design 框架 1.在你的api文件下編寫接口路徑 import request from /utils/request import storage from storeimport {AUTHORIZATION} from /store/mutation-types const api {downloadVocabularyTemplate:/vocabulary/downloadVocabularyTemplate, }export funct…

TCPIP詳解 卷1協議 六 DHCP和自動配置

6.1——DHCP和自動配置 為了使用 TCP/IP 協議族&#xff0c;每臺主機和路由器需要一定的配置信息。基本上采用3種方法&#xff1a;手工獲得信息&#xff1b;通過一個系統獲得使用的網絡服務&#xff1b;使用某種算法自動確定。 擁有一個IP 地址和子網掩碼&#xff0c;以及 DN…

聯想電腦開機出現Defalut Boot Device Missing or Boot Failed怎么辦

目錄 一、恢復bios默認設置 二、關機重啟 三、“物理”方法 在圖書館敲代碼時&#xff0c;去吃了午飯回來發現剛開機就出現了下圖的問題&#xff08;崩潰&#xff09;&#xff0c;想起之前也發生過一次 這樣的問題&#xff0c;現在把我用到的方法寫在下面&#xff0c;可能對…

用戶登陸UI

本節任務 完成用戶登陸UI&#xff0c;點擊登陸按鈕跳轉到應用主頁 界面原型&#xff1a; 登陸頁面&#xff1a; 登陸成功頁面&#xff1a; 涉及知識點&#xff1a; 線性布局Image組件輸入框復選框分割線按鈕路由跳轉背景色、內容對齊 1 新建項目 錄入項目信息&#xff1a;…

linux多線(進)程編程——(1)前置知識

liunx多線程編程&#xff08;前置知識&#xff09;前置知識 前言 學習編程就像是修仙&#xff0c;分為宗門的正統修士&#xff08;計算機專業的學生&#xff09;&#xff0c;以及野修&#xff08;半路轉碼&#xff09;。正統修士有各大宗門的功法&#xff0c;保證一路修行暢通…

Npfs!NpFsdCreate函數分析之從NpCreateClientEnd函數分析到Npfs!NpSetConnectedPipeState

第一部分&#xff1a; 1: kd> g Breakpoint 5 hit Npfs!NpFsdCreate: baaecba6 55 push ebp 1: kd> kc # 00 Npfs!NpFsdCreate 01 nt!IofCallDriver 02 nt!IopParseDevice 03 nt!ObpLookupObjectName 04 nt!ObOpenObjectByName 05 nt!IopCreateFile 06…