搜尋

Easing Animations in Canvas

HTML5<canvas></canvas>元素結合JavaScript 的Canvas API,構成了網頁上主要的柵格圖形和動畫功能之一。 Canvas 的一個常見用例是為網站(特別是遊戲)以編程方式生成圖像。我構建的一個紙牌接龍遊戲網站正是這樣做的,其中所有紙牌及其移動都使用canvas 完成。

本文將重點關注canvas 中的動畫以及使動畫看起來更流暢的技術。我們將特別關注緩動過渡(例如“ease-in”和“ease-out”),這些過渡在canvas 中不像CSS 中那樣是免費提供的。

讓我們從一個靜態canvas 開始。我已經在canvas 上繪製了一張從DOM 中獲取的撲克牌:

讓我們從一個基本的動畫開始:在canvas 上移動那張撲克牌。即使是很基本的事情,在canvas 中也需要從頭開始工作,因此我們必須開始構建我們可以使用的函數。

首先,我們將創建一些函數來幫助計算X 和Y 坐標:

 function getX(params) {
  let distance = params.xTo - params.xFrom;
  let steps = params.frames;
  let progress = params.frame;
  return distance / steps * progress;
}

function getY(params) {
  let distance = params.yTo - params.yFrom;
  let steps = params.frames;
  let progress = params.frame;
  return distance / steps * progress;
}

這將幫助我們在圖像動畫時更新位置值。然後,我們將不斷重新渲染canvas,直到動畫完成。我們通過將以下代碼添加到我們的addImage()方法來實現這一點。

 // ... (省略部分代碼) ...
if (params.frame <p>現在我們有了動畫!我們每次都在穩定地遞增1 個單位,我們稱之為<em>線性</em>動畫。</p><p>您可以看到形狀如何以線性方式從A 點移動到B 點,在兩點之間保持相同的恆定速度。它功能齊全,但缺乏真實感。開始和停止很突兀。</p><p>我們想要的是物體加速(ease-in)和減速(ease-out),這樣它就能模擬現實世界中物體在摩擦力和重力作用下的運動。</p><p></p><h2 id="JavaScript-緩動函數"> JavaScript 緩動函數</h2><p>我們將使用“三次”ease-in 和ease-out 過渡來實現這一點。我們修改了Robert Penner 的Flash 緩動函數中找到的方程式之一,使其適合我們在這裡想要做的事情。</p><pre class="brush:php;toolbar:false"> function getEase(currentProgress, start, distance, steps) {
  currentProgress /= steps/2;
  if (currentProgress <p>將其插入到我們的代碼中(這是一個<strong>三次緩動</strong>),我們將得到一個更平滑的結果。請注意,卡片如何加速朝向空間的中心,然後在到達終點時減速。</p><p></p><h2 id="使用JavaScript-進行高級緩動">使用JavaScript 進行高級緩動</h2><p>我們可以使用二次或正弦緩動來獲得更慢的加速度。</p><pre class="brush:php;toolbar:false"> function getQuadraticEase(currentProgress, start, distance, steps) {
  currentProgress /= steps/2;
  if (currentProgress <p>為了獲得更快的加速度,可以使用五次或指數緩動:</p><pre class="brush:php;toolbar:false"> function getQuinticEase(currentProgress, start, distance, steps) {
  currentProgress /= steps/2;
  if (currentProgress <p></p><h3 id="使用GSAP-實現更複雜的動畫">使用GSAP 實現更複雜的動畫</h3><p>自己編寫緩動函數很有趣,但是如果您想要更強大的功能和靈活性呢?您可以繼續編寫自定義代碼,也可以考慮使用更強大的庫。讓我們為此轉向GreenSock 動畫平台(GSAP)。</p><p>使用GSAP,動畫的實現變得容易得多。以這個例子為例,卡片在結束時會反彈。請注意,GSAP 庫包含在演示中。</p><p>關鍵函數是<code>moveCard</code> :</p><pre class="brush:php;toolbar:false"> function moveCard() {
  gsap.to(position, {
    duration: 2,
    ease: "bounce.out",
    x: position.xMax,
    y: position.yMax,
    onUpdate: function() {
      draw();
    },
    onComplete: function() {
      position.x = position.origX;
      position.y = position.origY;
    }
  });
}

gsap.to方法是所有魔法發生的地方。在兩秒的持續時間內,位置對像被更新,並且每次更新時都會調用onUpdate ,從而觸發canvas 的重繪。

而且我們不僅僅是在談論反彈。有大量的不同緩動選項可供選擇。

總結

仍然不確定在canvas 中使用哪種動畫樣式和方法進行緩動?這裡有一個演示不同的緩動動畫的示例,包括GSAP 中提供的動畫。

查看我的紙牌接龍遊戲以查看非GSAP 動畫的實時演示。在這種情況下,我已經添加了動畫,以便遊戲中的卡片在它們在堆之間移動時ease-out 和ease-in。

除了創建運動之外,緩動函數還可以應用於任何具有起始結束狀態的其他屬性,例如不透明度、旋轉和縮放的變化。我希望您能找到許多方法來使用緩動函數,使您的應用程序或遊戲看起來更流暢。

以上是寬鬆的動畫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
我們如何標記Google字體並創建Goofonts.com我們如何標記Google字體並創建Goofonts.comApr 12, 2025 pm 12:02 PM

Goofonts是由開發人員和設計師丈夫簽名的附帶項目,它們都是版式的忠實擁護者。我們一直在標記Google

永恆的Web開發文章永恆的Web開發文章Apr 12, 2025 am 11:44 AM

Pavithra Kodmad向人們詢問了他們認為是關於網絡開發的一些最永恆的文章的建議

與部分元素的交易與部分元素的交易Apr 12, 2025 am 11:39 AM

同一天發表了兩篇文章:

使用JavaScript API練習GraphQl查詢使用JavaScript API練習GraphQl查詢Apr 12, 2025 am 11:33 AM

學習如何構建GraphQL API可能具有挑戰性。但是您可以學習如何在10分鐘內使用GraphQL API!碰巧的是,我得到了完美的

組件級CMS組件級CMSApr 12, 2025 am 11:09 AM

當一個組件生活在數據查詢居住在附近的數據查詢的環境中時,視覺組件和

將類型設置在圓上...帶偏移路徑將類型設置在圓上...帶偏移路徑Apr 12, 2025 am 11:00 AM

這裡是Yuanchuan的一些合法CSS騙局。有此CSS屬性偏移路徑。曾幾何時,它被稱為Motion-Path,然後被更名。我

'恢復”在CSS中有什麼作用?'恢復”在CSS中有什麼作用?Apr 12, 2025 am 10:59 AM

Miriam Suzanne在Mozilla開發人員的視頻中解釋了該主題。

現代戀人現代戀人Apr 12, 2025 am 10:58 AM

我喜歡這樣的東西。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器