
Anime.js 是由 Julian Garnier 打造的一款輕量級 JavaScript 動畫引擎,為網頁動畫領域貢獻超過十年。2025 年,這個函式庫經歷了史上最重大的轉變:從底層全面重寫為版本 4(v4),將原本單一的 anime() 函式取代為模組化、以 ESM 為優先的 API。截至 2026 年初,Anime.js 在 GitHub 上擁有超過 58,000 顆星,活躍的 npm 發布版本也已推進到 v4.3.6,證明了在 CSS 動畫與 WAAPI 盛行的時代,一套設計良好的動畫函式庫仍能蓬勃發展。
第 4 版不僅僅是增量更新,而是一次理念上的轉變:不再是單一函式包辦所有功能,v4 提供離散、可 tree-shaking 的模組,按名稱匯入即可使用。核心的 animate() 函式取代了舊有的 anime()。參數經過重新命名(value 屬性改為 to,easing 改為 ease),並新增了多項全新系統——透過 createSpring 實現彈簧物理、拖曳互動、SVG 運動路徑、文字分割,以及僅 3 KB 的 WAAPI 整合。最終成果是一個既熟悉又遠比以往強大的函式庫,能夠在 3000 個 DOM 元素上驅動每秒 60 幀的動畫,同時融入現代建置流程而不增加多餘體積。
本指南涵蓋 2026 年使用 Anime.js v4 所需的一切知識:安裝方式、模組化 API、從 v3 升級的重大變更、彈簧物理、時間軸、SVG 與文字動畫、效能特性,以及 v4.2 和 v4.3 系列的最新功能。
最後更新:2026 年 5 月 2 日——基於 animejs.com 官方文件與 juliangarnier/anime 儲存庫。
目錄
- Anime.js v4 有哪些新功能?
- 從 v3 升級到 v4 的重大變更
- 如何安裝與匯入 Anime.js v4?
- 核心 API:animate() 函式
- v4 的關鍵影格
- 合成模式:Replace、Blend 與 None
- 使用 createSpring 的彈簧物理
- 時間軸與標籤位置
- SVG 動畫模組
- 使用 splitText 的文字動畫
- 拖曳互動
- createScope 的框架整合
- WAAPI 整合
- 引擎設定與效能
- 版本歷史:v4.2 與 v4.3
- 延伸閱讀與資源
Anime.js v4 有哪些新功能?
直接回答:Anime.js v4 是一次全面重寫,以模組化 ESM 優先的 API 取代了單一的
anime()函式。它引入了彈簧物理、四種語法的關鍵影格、帶標籤位置的強化時間軸、用於框架綁定的 createScope、createDraggable、SVG 變形與運動路徑、splitText、WAAPI,以及引擎層級的設定——全部在數千個元素上維持 60fps 的效能。
Anime.js v4 於 2025 年 4 月發布,歷經五年的開發,代表了整體架構的大翻新。以下是每個主要新系統的摘要:
| 功能 | 模組 | 說明 |
|---|---|---|
| 模組化 API | 核心(animejs) | 可 tree-shaking 的 ESM 匯入:animate、stagger、createTimeline 等 |
| 彈簧物理 | animejs | createSpring() 含質量、剛度、阻尼、速度、彈跳 |
| 關鍵影格 | 核心 | 四種語法:陣列式、持續時間式、百分比式、偏移式 |
| 合成模式 | 核心 | replace、blend 或 none,用於疊加動畫 |
| 強化時間軸 | animejs/timeline | 標籤位置(<<、<=、LABEL、LABEL+=N)、.call()、.sync() |
| createScope | animejs/scope | 限域 DOM 查詢與框架元件的自動清理 |
| createDraggable | animejs/draggable | 拖曳、吸附、輕彈、拋擲,釋放時結合彈簧物理 |
| SVG 模組 | animejs/svg | createMotionPath、createDrawable、變形 |
| 文字模組 | animejs/text | splitText 支援 Intl.Segmenter |
| WAAPI 整合 | animejs | 使用 Web Animations API 的 3 KB 替代方案 |
| 引擎設定 | animejs/engine | 幀率、精確度、全域預設、隱藏頁面時暫停 |
| CSS 變數 | 核心 | 直接對 CSS 自訂屬性進行動畫 |
| createLayout | animejs(v4.3) | 在版面狀態之間自動產生動畫 |
架構一覽
從 v3 升級到 v4 的重大變更
直接回答:最重要的變更包括:
anime()改為animate()、value改為to、easing改為ease,以及alternate等方向標記從字串值改為布林屬性。
如果您要從 Anime.js v3 遷移,每一個呼叫位置都需要更新。API 表面經過精心簡化與重新命名,以求一致性。下表列出了每個 v3 API 對應的 v4 版本。
參數變更
| v3(已棄用) | v4(現行) | 說明 |
|---|---|---|
anime({targets: ...}) | animate(targets, {...}) | Targets 現在是第一引數 |
value: 100 | to: 100 | 關鍵影格屬性重新命名 |
easing: 'easeOutQuad' | ease: 'outQuad' | 去掉 ease 前綴;省略 easeIn/easeOut |
direction: 'reverse' | reversed: true | 布林值,非字串 |
direction: 'alternate' | alternate: true | 布林值,非字串 |
endDelay | loopDelay | 為清晰起見重新命名 |
round: 100 | modifier: utils.round(2) | 現在使用修飾函式 |
autoplay: false | autoplay: false | 未變更 |
loop: true | loop: true | 未變更(迴圈次數 0 = 不迴圈) |
回呼變更
| v3(已棄用) | v4(現行) |
|---|---|
begin | onBegin |
update | onUpdate |
change | onRender |
complete | onComplete |
loopBegin / loopComplete | onLoop |
模組變更
| v3(全域) | v4(匯入) |
|---|---|
anime.timeline() | 來自 animejs/timeline 的 createTimeline() |
anime.stagger() | 來自 animejs 的 stagger() |
anime.path() | 來自 animejs/svg 的 createMotionPath() |
anime.setDashoffset() | 來自 animejs/svg 的 createDrawable() |
anime.reverse() | animation.reverse()(實例方法) |
.finished(Promise) | .then(callback)(實例方法) |
如何安裝與匯入 Anime.js v4?
直接回答:執行
npm install animejs@latest,然後以import { animate, stagger } from 'animejs'的方式匯入模組。若使用 CDN,可用 ESM 語法從 esm.sh 或 jsDelivr 匯入。
安裝遵循標準的 npm 慣例:
# 安裝最新版本(截至 2026 年 5 月為 v4.3.6)
npm install animejs@latest
# 或安裝指定版本
npm install animejs@4.3.6
模組匯入路徑
Anime.js v4 從 v4.2.0 起支援子路徑匯入。每個模組可單獨匯入,以達到最佳的 tree-shaking 效果:
// 核心——永遠可用
import { animate, stagger, createSpring, createTimer } from 'animejs';
import { waapi } from 'animejs';
import { engine, defaults } from 'animejs';
import { utils } from 'animejs';
// 子路徑匯入(v4.2+)
import { createTimeline } from 'animejs/timeline';
import { createScope } from 'animejs/scope';
import { createDraggable } from 'animejs/draggable';
import { splitText } from 'animejs/text';
import { createMotionPath, createDrawable } from 'animejs/svg';
import { eases, spring } from 'animejs/easings';
CDN 用法
<script type="module">
import { animate, stagger } from 'https://esm.sh/animejs@4.3.6';
animate('.box', {
x: { to: 300 },
duration: 1000,
ease: 'outQuint',
});
</script>
核心 API:animate() 函式
直接回答:
animate(targets, params)是主要的進入點。它接受 CSS 選擇器、DOM 元素、NodeList 或 JavaScript 物件作為目標。參數包括to、from、ease、duration、delay、loop、alternate、reversed、composition、modifier以及所有回呼函式。
animate() 函式接受兩個引數:目標與參數物件。以下是完整的參數參考:
animate('.element', {
// 動畫屬性
x: { to: 300 }, // 單一屬性含 from/to
rotate: { from: 0, to: 360 }, // 明確指定 from 與 to
scale: 2, // 簡寫(等同於 to: 2)
backgroundColor: '#ff0', // CSS 顏色(支援含透明度的十六進位: #ff0a)
// 時間設定
duration: 1000, // 毫秒(預設值因情況而異)
delay: 200, // 開始前的延遲
ease: 'outQuint', // 緩動函式(參見下方緩動表)
loop: 2, // 額外重複次數(0 = 不迴圈)
alternate: true, // 每次迴圈時反向
reversed: false, // 從結束值開始
loopDelay: 0, // 迴圈之間的暫停(取代 v3 的 endDelay)
// 渲染
composition: 'replace', // 'replace' | 'blend' | 'none'
modifier: utils.round(2), // 數值後處理
frameRate: 60, // 限制 FPS
playbackRate: 1, // 速度倍率
// 回呼
onBegin: () => {}, // 動畫(含延遲)開始時
onBeforeUpdate: () => {}, // 每次更新 tick 之前
onUpdate: (anim) => {}, // 每一幀
onRender: (anim) => {}, // 數值實際變更時
onLoop: (anim) => {}, // 每次迴圈結束時
onPause: (anim) => {}, // 暫停時
onComplete: (anim) => {}, // 完全結束時
});
緩動函式參考
Anime.js v4 移除了緩動名稱中的 ease 前綴(使用 'outQuad' 而不是 'easeOutQuad')。自訂緩動可以傳入函式或使用 createSpring() 建立。
| 緩動名稱 | 說明 |
|---|---|
'linear' | 恆定速度 |
'outQuad' | 緩慢減速 |
'inQuad' | 緩慢加速 |
'inOutQuad' | 起止皆緩 |
'outCubic' | 溫和減速 |
'inOutCubic' | 平滑起止 |
'outQuint' | 強烈減速 |
'inOutQuint' | 明顯緩動 |
'outExpo' | 指數級減速 |
'inOutElastic' | 兩端彈性效果 |
'outBounce' | 結束時彈跳 |
'outBack' | 過衝後回彈 |
v4 的關鍵影格
直接回答:Anime.js v4 支援四種關鍵影格語法:陣列式(每個項目是一個含自訂 to/from 的關鍵影格)、持續時間式、百分比式以及偏移式——讓您精細控制多步驟動畫。
Anime.js v4 引入了四種不同的關鍵影格語法,各自適用於不同的使用情境:
// 1. 陣列式(最靈活——每個元素是一個關鍵影格)
animate('.box', [
{ rotate: { to: 90 }, duration: 500 },
{ rotate: { to: 180 }, duration: 500 },
{ rotate: { to: 360 }, duration: 500 },
]);
// 2. 持續時間式(進度根據持續時間計算)
animate('.box', {
rotate: {
0: 0, // 0ms——開始
500: 90, // 500ms——關鍵影格 1
1000: 180, // 1000ms——關鍵影格 2
2000: 360, // 2000ms——關鍵影格 3
}
});
// 3. 百分比式(進度相對於總持續時間)
animate('.box', {
rotate: {
'0%': 0,
'25%': 90,
'50%': 180,
'100%': 360,
}
});
// 4. 偏移式(明確偏移量以精確控制時間)
animate('.box', {
rotate: { to: 360 },
offset: [0, 500, 1000, 2000],
value: [0, 90, 180, 360],
});
合成模式:Replace、Blend 與 None
直接回答:
composition參數控制重疊動畫的互動方式。replace(預設)在動畫進行中切換數值,blend在重疊數值之間插值,而none則讓動畫獨立運行。
當多個動畫同時影響同一個屬性時,composition 模式決定了行為:
| 模式 | 行為 | 最適合 |
|---|---|---|
'replace'(預設) | 新動畫立即接管;舊值被覆蓋 | 順序動畫、懸浮轉場 |
'blend' | 重疊動畫的數值會一起插值 | 平滑疊加效果 |
'none' | 動畫獨立運行,不進行合成計算 | 高效能場景,獨立元素 |
// Blend 範例——兩個重疊的顏色動畫平滑融合
animate('.box', {
backgroundColor: { to: '#f00' },
duration: 1000,
});
animate('.box', {
backgroundColor: { to: '#00f' },
duration: 1000,
delay: 500,
composition: 'blend', // 透過紫色從紅色插值到藍色
});
使用 createSpring 的彈簧物理
直接回答:
createSpring()產生基於物理的緩動函式,參數包含mass(質量)、stiffness(剛度)、damping(阻尼)、velocity(速度)以及bounce(彈跳,v4.2+)。將結果傳給ease參數,即可獲得自然的物理驅動運動。
彈簧物理帶來了傳統緩動曲線無法比擬的自然運動感。Anime.js v4 將此作為一級功能:
import { animate, createSpring } from 'animejs';
const spring = createSpring({
mass: 1, // 越大 = 震盪越慢
stiffness: 200, // 越高 = 越乾脆
damping: 10, // 越高 = 彈跳越少
velocity: 0, // 初始速度
bounce: 0.5, //(v4.2+)控制彈簧彈跳強度,0-1
});
animate('.ball', {
translateY: { to: 300 },
ease: spring,
loop: true,
alternate: true,
});
彈簧參數比較
| 參數 | 範圍 | 效果 |
|---|---|---|
mass | 0.1 – 10 | 質量越小,速度越快、反應越靈敏 |
stiffness | 1 – 500 | 越高,回到靜止狀態越乾脆 |
damping | 1 – 50 | 越高,震盪消失越快 |
velocity | 任意數 | 初始推動方向與力度 |
bounce(v4.2+) | 0 – 1 | 0 = 無彈跳,1 = 最大彈跳 |
時間軸與標籤位置
直接回答:
createTimeline()使用add()和set()方法建立序列化動畫。v4 時間軸支援標籤位置(<<、<=、LABEL_NAME)、明確偏移量(+=500、-=200),以及新的方法如.call()、.sync()、.label()和.set()。
v4 的時間軸功能大幅強化。標籤取代了舊的位置系統,提供更易讀的語法:
import { createTimeline } from 'animejs/timeline';
const tl = createTimeline({
defaults: { ease: 'outQuad', duration: 300 },
loop: 1,
});
// 使用位置標籤加入動畫
tl.add('.box-a', { x: { to: 200 } }) // 立即開始
.add('.box-b', { scale: { to: 1.5 } }, '+=200') // 前一個結束後 200ms
.add('.box-c', { rotate: { to: 180 } }, '<<') // 前一個動畫的起點
.label('midpoint') // 命名標記
.add('.box-d', { y: { to: 100 } }, 'midpoint') // 在標籤位置
.add('.box-e', { opacity: { to: 0 } }, 'midpoint+=500') // 標籤後 500ms
.play();
時間軸位置語法
| 位置 | 含義 |
|---|---|
'+=500' | 前一個動畫結束後 500ms |
'-=200' | 前一個動畫結束前 200ms |
'<<' | 與前一個動畫的起點對齊 |
'<=' | 與前一個動畫的結束點對齊 |
'midpoint' | 在指定的命名標籤位置 |
'midpoint+=300' | 命名標籤後 300ms |
stagger(80) | 使用 stagger 函式的交錯偏移(v4 新增!) |
SVG 動畫模組
直接回答:來自
animejs/svg的 SVG 模組提供createMotionPath(沿路徑運動)、createDrawable(線條繪製動畫),以及 SVG 形狀之間的內建變形功能——全部由核心animate()函式驅動。
SVG 動畫是 Anime.js 的旗艦功能之一。V4 將此組織為專用模組:
運動路徑
import { animate } from 'animejs';
import { createMotionPath } from 'animejs/svg';
const { translateX, translateY, rotate } = createMotionPath('#path');
animate('.car', {
translateX,
translateY,
rotate,
duration: 3000,
ease: 'outQuint',
});
createMotionPath 函式現在支援 offset 參數(v4.2.1),用於設定元素相對於路徑的位置。
線條繪製(createDrawable)
import { createDrawable } from 'animejs/svg';
const drawable = createDrawable('#my-path'); // 或 createDrawable('path')
animate(drawable, {
draw: '0 1', // 從繪製 0% 到 100%
duration: 2000,
ease: 'outQuad',
});
形狀變形
// 將一個路徑變形成另一個
animate('#shape', {
d: { to: '#target-shape' }, // 變形路徑資料
duration: 1500,
ease: 'inOutQuint',
});
使用 splitText 的文字動畫
直接回答:來自
animejs/text的splitText()使用瀏覽器的 Intl.Segmenter API 將文字拆分為字元、單詞和行。它將每個片段包裹在可設定的 HTML 元素中,以便進行逐片段動畫。
文字模組讓文字揭示與動態排版變得簡單直接:
import { splitText } from 'animejs/text';
const split = splitText({
text: 'Anime.js v4 makes text dance!',
by: 'word', // 'char' | 'word' | 'line' | 'all'
tag: 'span', // 用於包裹每個片段的 HTML 元素
});
然後您可以單獨對產生的節點進行動畫:
import { animate, stagger } from 'animejs';
animate(split.nodes, {
translateY: { from: -20, to: 0 },
opacity: { from: 0, to: 1 },
duration: 600,
delay: stagger(50), // 每個單詞/字元交錯出現
ease: 'outQuad',
});
splitText 選項
| 選項 | 型別 | 預設值 | 說明 |
|---|---|---|---|
by | string | 'char' | 'char'、'word'、'line' 或 'all' |
tag | string | 'span' | 包裝元素型別 |
class | string | '' | 包裝器的 CSS 類別 |
wrap | string | '' | 行元素的包裝器 |
lines | boolean | true | 保留換行 |
clone | boolean | false | 為效果複製節點 |
includeSpaces | boolean | false | 對空白字元也進行動畫 |
accessible | boolean | true | 透過 aria-label 維持無障礙性 |
拖曳互動
直接回答:來自
animejs/draggable的createDraggable()支援拖曳、吸附、輕彈和拋擲互動。它與createSpring()搭配使用,提供基於物理的釋放緩動,並支援邊界、吸附目標和拖曳門檻值。
Draggable 是 v4 中新增的模組,提供完整的拖放互動:
import { createDraggable, createSpring } from 'animejs';
const drag = createDraggable({
el: '.card',
container: '.stack',
bounds: { x: [0, 400], y: [0, 400] },
releaseEase: createSpring({ stiffness: 150, damping: 15 }),
dragThreshold: 10, //(v4.2.1+)開始拖曳前的最小像素數
onStart: () => {},
onDrag: () => {},
onDrop: () => {},
onSnap: () => {},
});
// 後續使用
drag.destroy();
拖曳設定
| 設定 | 型別 | 預設值 | 說明 |
|---|---|---|---|
el | Element | 必填 | 可拖曳的元素 |
container | Element | document.body | 限制移動範圍的容器 |
bounds | Object | – | { x: [min, max], y: [min, max] } |
releaseEase | Function | eases.outQuint | 釋放時的緩動(支援 spring()) |
dragThreshold | Number | 0 | 啟動拖曳的最小距離(v4.2.1) |
onStart | Function | – | 拖曳開始時呼叫 |
onDrag | Function | – | 拖曳期間呼叫 |
onDrop | Function | – | 釋放時呼叫 |
createScope 的框架整合
直接回答:
createScope()提供一個限域環境,包含qs()、qsa()和registerMethod()等輔助方法,以及用於清理的revert()方法——非常適合 Svelte、React 或 Vue 的元件生命週期。
框架整合是 v4 的一級關注事項。createScope() 消除了手動管理查詢選擇器和記憶體洩漏的問題:
import { createScope } from 'animejs/scope';
// 在 Svelte onMount / React useEffect 內部
const scope = createScope({ root: containerElement });
// 限域查詢選擇器
scope.qs('.card'); // 僅在根元素範圍內
scope.qsa('.item'); // 根元素內所有符合的元素
// 註冊自訂方法
scope.registerMethod('customAnimation', (el) => {
animate(el, { scale: 1.2 });
});
// 卸載時清理
onDestroy(() => scope.revert());
WAAPI 整合
直接回答:WAAPI 模組(來自
animejs的waapi)提供相同的 Anime.js 語法,但透過瀏覽器原生 Web Animations API 驅動動畫,產生的捆綁體積僅 3 KB。它支援相同的animate()簽名、stagger()和緩動函式。
對於捆綁體積至關重要的專案,WAAPI 整合提供了一個極具吸引力的替代方案:
import { waapi, stagger } from 'animejs';
waapi.animate('span', {
translate: '0 -2rem',
delay: stagger(100),
duration: 600,
loop: true,
alternate: true,
ease: 'inOut(2)',
});
何時使用 WAAPI 與核心引擎:
| 情境 | 建議 |
|---|---|
| 最大程度節省捆綁體積 | WAAPI(3 KB) |
| 最大元素數量(3000+) | 核心引擎(大規模下 60fps) |
| SVG 動畫 | 核心引擎 |
| 彈簧物理 | 核心引擎 |
| 簡單 CSS 轉場 | WAAPI |
| 瀏覽器原生效能 | WAAPI |
引擎設定與效能
直接回答:
engine模組暴露全域設定,包括幀率上限(v4.3 中可達 240 FPS)、預設參數、播放時間單位,以及在文件隱藏時的自動暫停行為。
引擎設定
import { engine } from 'animejs';
engine.defaults = { duration: 500, ease: 'outQuad' }; // 全域預設
engine.useDefaultMainLoop = false; // 停用內建迴圈
engine.update(); // 手動更新影格
engine.pauseOnDocumentHidden = true; // 分頁隱藏時暫停
engine.timeUnit = 'ms'; // 'ms' 或 's'
engine.precision = 2; // 數值的十進位精確度
效能基準
Anime.js v4 的渲染引擎已針對大規模動畫進行最佳化:
| 情境 | 元素/補間 | 效能 |
|---|---|---|
| DOM 元素(CSS 變形) | 3000 個元素,6000 個補間 | 2019 年 Intel MacBook Pro 上 60 fps |
| three.js InstancedMesh | 50000 個網格值,100000 個補間 | 流暢 60 fps |
| WAAPI 路徑 | 因瀏覽器引擎而異 | 瀏覽器原生效能 |
| 引擎幀率上限(v4.3+) | – | 最高 240 fps |
| 最小捆綁(WAAPI) | – | 約 3 KB gzipped |
瀏覽器支援
| 瀏覽器 | 最低版本 |
|---|---|
| Chrome | 79+ |
| Edge | 79+ |
| Firefox | 71+ |
| Safari | 13+ |
Anime.js v4 不支援 Internet Explorer。
版本歷史:v4.2 與 v4.3
直接回答:v4.2 系列(2025 年 9 月)新增了彈簧
bounce、WAAPI 緩動、CSS 變數值以及子路徑匯入。v4.3 系列(2026 年 1 月至 2 月)新增了createLayout,將最大 FPS 提升至 240,並發布了多項錯誤修正。
該函式庫在 2025 和 2026 年期間保持活躍維護,發布節奏快速:
| 版本 | 日期 | 主要變更 |
|---|---|---|
| v4.0.0 | 2025 年 4 月 | 初始 v4 發布:模組化 API、新參數、時間軸、彈簧、拖曳、SVG、文字 |
| v4.2.0 | 2025 年 9 月 | 彈簧 bounce 參數、子路徑匯入、createSeededRandom、CSS 變數值、WAAPI 緩動 |
| v4.2.1 | 2025 年 10 月 | SVG createMotionPath 偏移、Draggable dragThreshold |
| v4.3.0 | 2026 年 1 月 20 日 | createLayout()、函式式緩動、時間軸合成、最大 FPS 120 -> 240 |
| v4.3.1 | 2026 年 1 月 21 日 | 錯誤修正:內聯標籤偵測與註解(Layout) |
| v4.3.2 | 2026 年 1 月 23 日 | 錯誤修正:來自 v4.3.1 的內聯標籤回歸 |
| v4.3.3 | 2026 年 1 月 23 日 | 函式式 from 值的重新整理支援、重新整理時的單位轉換、onResize 回呼 |
| v4.3.4 | 2026 年 1 月 24 日 | WAAPI 同步自動持久化、註解語法修正 |
| v4.3.5 | 2026 年 1 月 25 日 | Auto Layout 內聯回歸修正、背景顏色回歸修正 |
| v4.3.6 | 2026 年 2 月 14 日 | Auto Layout onScroll 同步修正 |
延伸閱讀與資源
- Anime.js 官方網站 – 完整文件、即時展示與遊樂場
- GitHub 儲存庫:juliangarnier/anime – 原始碼、議題與發布版本
- npm 套件:animejs – 最新版本與安裝
- Anime.js v4 重大變更 Wiki – 官方 v3 到 v4 遷移指南
- DeepWiki API 參考 – 社群維護的完整 API 文件
- libs.tech 上的 Anime.js – 依賴分析與捆綁體積分解
Anime.js 由 Julian Garnier 建立與維護,並以 MIT 授權釋出。本指南根據官方 animejs.com 文件、juliangarnier/anime GitHub 儲存庫以及社群資源編寫。最後更新於 2026 年 5 月 2 日。
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!