前端網頁設計動畫套件anime easing介紹與範例
作者:網頁設計師
於 2025-02-10 00:00:00 ‧ 328次閱讀

網頁設計時常會遇到動畫展示的工程,一般CSS可以做到基礎動畫,但是如果需要多種動畫模式,或是連續型動畫,大部份網頁設計師還是會使用JAVASCRIPT套件。
前端網頁設計動畫套件anime easing介紹與範例
網頁動畫的順暢度與自然感受很大程度取決於 easing 函數的選擇。本文將深入介紹 Anime.js 中的 easing 函數,並透過實際範例展示各種效果。
Easing 函數基本概念
Easing 函數定義了動畫在執行過程中的加速和減速方式。它將線性的時間輸入轉換為非線性的位置輸出,使動畫更符合自然運動規律。Anime.js 提供了豐富的內建 easing 函數,大致可分為以下幾類:
1. 基礎曲線類型
linear
: 線性變化,無加速度easeInOutSine
: 正弦曲線,適合一般用途easeInOutQuad
: 平方曲線,較為平滑的加減速easeInOutCubic
: 立方曲線,明顯的加減速效果easeInOutQuart
: 四次方曲線,更強烈的加減速easeInOutQuint
: 五次方曲線,極強的加減速
2. 特殊效果曲線
easeInOutElastic
: 彈性效果,帶有回彈easeInOutBack
: 超出終點後回彈easeInOutBounce
: 碰撞反彈效果
實際網頁設計應用範例
以下展示幾個常見場景的 easing 函數設計應用:
基本位移動畫
javascriptanime({
targets: '.box',
translateX: 250,
duration: 1000,
easing: 'easeInOutQuad'
});
彈性選單展開
javascriptanime({
targets: '.menu',
height: ['0px', '200px'],
duration: 800,
easing: 'easeOutElastic(1, .8)'
});
漸顯效果
javascriptanime({
targets: '.fade-in',
opacity: [0, 1],
duration: 1200,
easing: 'easeInOutSine'
});
進階使用技巧
1. 自定義 Easing 函數
Anime.js 允許使用貝茲曲線定義自訂 easing:
javascriptanime({
targets: '.custom',
translateX: 250,
duration: 1000,
easing: 'cubicBezier(.5, .05, .1, .3)'
});
2. 串連多個動畫
可以為動畫序列中的每個階段設定不同的 easing:
javascriptanime.timeline()
.add({
targets: '.sequence',
translateX: 250,
duration: 1000,
easing: 'easeInQuad'
})
.add({
targets: '.sequence',
translateY: 50,
duration: 800,
easing: 'easeOutElastic(1, .8)'
});
效能考量與網頁設計最佳實踐
- 動畫性能優化
- 優先使用
transform
和opacity
屬性 - 避免過於複雜的 easing 函數在低效能裝置上使用
- 為較短的動畫選擇簡單的 easing 函數
- 優先使用
- 選擇適當的 Easing
- 介面元素移動:使用
easeInOutQuad
或easeInOutCubic
- 彈出效果:使用
easeOutElastic
或easeOutBack
- 自然下落:使用
easeInQuad
或easeInCubic
- 介面元素移動:使用
網頁設計範例:各種動作展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Anime.js Easing Demo</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mithril/2.2.2/mithril.min.js"></script>
<style>
* { box-sizing: border-box; }
.container {
max-width: 1200px;
margin: 20px auto;
padding: 20px;
background-color: #333;
border-radius: 8px;
}
.boxes {
display: inline-flex;
flex-wrap: wrap;
align-items: center;
width: 45%;
margin: .3em;
border-bottom: 1px dashed #fefefe;
padding-bottom: .5em;
}
.box {
width: 20px;
height: 20px;
background-color: #2f9e44;
border-radius: 3px;
display: inline-block;
margin: .3em;
opacity: 0;
}
.title {
color: #fefefe;
font-size: .875rem;
font-family: monospace;
margin: 0;
padding: 5px 0;
}
</style>
</head>
<body>
<div class="container" id="app"></div>
<script>
const INTERVAL = 300;
const TRANSLATE_X = 20;
function Boxes(vnode) {
const arr = [1, 2, 3, 4, 5];
const oncreate = _ => anime({
targets: vnode.dom.querySelectorAll('.box'),
translateX: arr.length * TRANSLATE_X,
opacity: 1,
loop: true,
easing: vnode.attrs.easing,
duration: (el, i) => i * INTERVAL + INTERVAL
});
const view = _ => m('.boxes',
m('h1.title', vnode.attrs.easing),
arr.map(_ => m('.box'))
);
return { view, oncreate };
}
function App() {
const eases = [
'easeInQuad',
'easeInCubic',
'easeInQuart',
'easeInQuint',
'easeInSine',
'easeInExpo',
'easeInCirc',
'easeInBack',
'easeInElastic',
'easeOutQuad',
'easeOutCubic',
'easeOutQuart',
'easeOutQuint',
'easeOutSine',
'easeOutExpo',
'easeOutCirc',
'easeOutBack',
'easeOutElastic',
'easeInOutQuad',
'easeInOutCubic',
'easeInOutQuart',
'easeInOutQuint',
'easeInOutSine',
'easeInOutExpo',
'easeInOutCirc',
'easeInOutBack',
'easeInOutElastic'
];
const view = _ => m('.easing-container',
eases.map(easing => m(Boxes, { easing }))
);
return { view };
}
m.mount(document.getElementById('app'), App);
</script>
</body>
</html>
選擇合適的 easing 函數對於創造自然、流暢的網頁動畫體驗至關重要。透過理解不同 easing 函數的特性,並在適當的網頁設計場景中運用,可以大幅提升使用者介面的互動品質。建議在開發過程中多加嘗試不同的 easing 函數,觀察效果並選擇最適合的方案。
CONTACT INFORMATION
其他新聞
-
網頁設計基礎要弄懂的知識,甚麼是表格甚麼是儲存格?
Published on 2025-04-11 11:10:00 -
你可能不知道的meta標籤!renderer介紹!
Published on 2025-03-27 12:00:00 -
JavaScript 中的防抖與節流:簡單明瞭的前端解析
Published on 2025-03-14 18:10:00 -
行動網頁設計的好幫手HTML capture讓用戶直接使用手機的麥克風與鏡頭!
Published on 2025-03-13 17:40:00 -
圖示設計實用指南:提供圖示設計的實用技巧與建議,包含UX和UI設計推薦,幫助設計師創建清晰、簡潔且具吸引力的圖示。
Published on 2025-03-08 19:20:00 -
CSS Grid是網頁設計中2D排版的好幫手!repeat() 與minmax()的應用介紹
Published on 2025-03-07 17:30:00 -
流動式版面設計 (Fluid Layout) 指南:網頁設計的演變趨勢
Published on 2025-03-06 14:20:00 -
HTML輸入元素input少見屬性pattern介紹,設計網頁時可以試試
Published on 2025-03-06 13:50:00 -
數位身份的隱形印記:深入解析Canvas指紋追蹤技術
Published on 2025-03-05 15:30:00 -
CSS 媒體查詢(Media Queries)介紹
Published on 2025-03-05 15:00:00 -
強大的CSS變數功能!為新式網頁設計創建可維護、可擴展的樣式!
Published on 2025-03-04 00:30:00 -
設計使用者網頁介面的最佳實踐,如何有效提升UI設計!
Published on 2025-03-02 15:30:00 -
列項符號也可以增加動畫效果!CSS ::marker 選擇器使用教學!
Published on 2025-03-01 21:30:00 -
自適應網頁設計使用夾鉗參數讓網站更美觀clamp()使用介紹!
Published on 2025-03-01 21:00:00 -
網頁設計中推薦使用CSS Anchor定位元素!可以更靈活配置版面!
Published on 2025-03-01 00:10:00 -
利用scroll-margin設計網頁可以有效提升客戶體驗
Published on 2025-02-28 19:00:00 -
interpolate-size讓我的網頁動畫原始碼更精簡!
Published on 2025-02-27 21:40:00 -
網頁設計的革命:當上帝視角UX成為未來趨勢
Published on 2025-02-26 15:40:00 -
3D網頁設計CSS必學重點:preserve-3d與flat!
Published on 2025-02-25 20:50:00 -
網頁設計的關鍵原則米勒定律,由心理學解釋人類注意力所衍生的設計要點。
Published on 2025-02-02 17:00:00 -
NPU是甚麼?詳細解說CPU、GPU、NPU、TPU!
Published on 2024-10-31 14:00:00 -
環保公司網頁設計案例:樺欣環保工程有限公司官網建置
Published on 2024-09-19 18:00:00 -
選擇網頁設計公司依據地圖評價準確嗎?
Published on 2024-09-15 12:00:00 -
網頁設計中推薦使用Anchor定位元素的新方法!
Published on 2024-08-28 23:40:00 -
甚麼是ARM伺服器?
Published on 2024-06-22 00:00:00 -
自行架設網站的優缺點分析
Published on 2024-03-10 18:00:00 -
房地產網頁設計案例:詠騰工業不動產官網架設
Published on 2023-12-31 10:50:00 -
無障礙網站設計與無障礙標章檢測等級
Published on 2023-10-29 14:10:00 -
如何挑選出穩健的網頁設計公司
Published on 2023-09-16 14:30:00