Canvas 動畫製作

2022-01-02 SVG排版與WEB前端分享

在前面的兩篇文章《Canvas 基本繪製(上)》《Canvas 基本繪製(下)》,介紹了Canvas的基本繪製。學過SVG的童鞋應該知道它是可以製作動畫,那麼Canvas是否能製作動畫呢?答案是肯定的。所以今天我們就給大家來介紹一下Canvas製作動畫。

Canvas動畫製作原理

簡單一句話概括:不斷的繪製與清除。

Canvas實現動畫步驟(不斷循環)

1、更新繪製的對象(比如位置的移動)

2、清除畫布

3、在畫布上重新繪製對象

Canvas 動畫相關命令

clearRect方法

context.clearRect(x,y,width,height);方法清空給定矩形內的指定像素。

save與restore方法

所有的 2D 繪圖上下文屬性都是可保存和恢復的屬性,但繪製的內容可不是,也就是說你恢復了繪圖上下文,並不會恢復其所繪製的圖形。

用來保存Canvas的狀態(類似數組的入棧操作)。

用來恢復Canvas之前保存的狀態(類似數組的出棧操作)。

這種狀態包括:strokeStyle, fillStyle, lineWidth, lineCap, shadowOffsetX, shadowOffsetY, shadowBlur, shadowColor, font, textAlign, textBaseline。

save與restore方法實例操作

<!doctype html>

<html>

<head>

<meta charset="UTF-8">

<title>HTML5學堂</title>

<link rel="stylesheet" href="../css/reset.css">

<script src="../js/jquery-1.8.3.min.js" charset="utf-8" type="text/javascript"></script>

<style>

.draw {

margin: 30px 20px;

border: 1px solid red;

}

</style>

</head>

<body>

<canvas id="testCanvas" width="1000" height="500"></canvas>

<script>

var testCanvas = document.getElementById("testCanvas");

// 獲取getContext()對象

var context = testCanvas.getContext("2d");

context.fillStyle = "red";

context.fillRect(10, 10, 150, 150);

// 保存狀態(紅色)

context.save();

context.fillStyle="green";

context.fillRect(150, 150, 170, 170);

// 保存狀態(綠色)

context.save();

// 恢復狀態(紅色)

context.restore();

context.fillRect(250, 250, 170, 170);

// 恢復狀態(綠色)

context.restore();

context.fillRect(380, 380, 170, 170);

context.beginPath();

</script>

</body>

</html>

效果圖

Canvas動畫製作實例

<!doctype html>

<html>

<head>

<meta charset="UTF-8">

<title>HTML5學堂</title>

<link rel="stylesheet" href="../css/reset.css">

<script src="../js/jquery-1.8.3.min.js" charset="utf-8" type="text/javascript"></script>

<style>

.wrap {

width: 1024px;

height: 800px;

margin: 0 auto;

}

.wrap canvas {

border: 1px solid #999;

}

</style>

</head>

<body>

<div>

<canvas width="1024" height="600">

您的瀏覽器不支持canvas!

</canvas>

</div>

<script>

var testCanvas = $("canvas")[0];

var context = testCanvas.getContext("2d");

var x = 0;

var y = 0;

var timer = null;

// 思路:進行清畫布 再次繪製(循環操作)

/*

* 功能:Canvas動畫繪製

* author:HTML5學堂、劉國利、陳能堡

*

*/

function draw(){

// 不斷改變繪製對象的水平位置

x++;

// 清除畫布

context.clearRect(0, 0, 1024, 600);

context.beginPath();

context.fillStyle = "red";

context.arc(x, 150, 100, 0, 2 * Math.PI, true);

context.closePath();

// 繪製輪廓

context.stroke();

// 填充顏色

context.fill();

}

// 設置計時器

setInterval(draw, 20);

</script>

</body>

</html>

效果圖

本文來源:HTML5學堂

想了解更多資訊,請點擊左下方的閱讀原文

相關焦點

  • HTML5 Canvas 動畫實例
    動畫的概念及原理1.動畫動畫是通過一幅幅靜止的,內容不同的畫面(即幀)快速播放使人們在視覺上產生運動的感覺。這是利用了人類眼睛的視覺暫留原理。利用人的這種生理特性可製作出具有高度想像力和表現力的動畫影片。
  • Canvas 動畫的性能優化實踐
    在實現這個動畫的過程中加深了對 canvas 動畫的一些了解,在這裡我僅是拋磚引玉的分享一下,歡迎各位大佬批評。代碼已上傳至 github 【https://github.com/wanqihua/blog】,感興趣的可以 clone 代碼到本地運行。
  • 打造高大上的Canvas粒子動畫
    1   繪製粒子輪廓圖首先要在canvas畫布上繪製一個由粒子組成的輪廓圖,記錄下每一個粒子的坐標,這樣才能有後續的動畫。1. 創建一個<canvas>元素,並獲取Canvas畫布渲染上下文
  • canvas繪製折線路徑動畫
    image.png其中的效果是一個折線路徑動畫效果,如下圖所示:動畫.gif要實現以上路徑動畫,一般可以使用svg的動畫功能。或者使用canvas繪製,結合路徑數學計算來實現。動畫1.gif漸變我們知道漸變沒法沿著任意路徑,如果計算折線,分段計算漸變又很麻煩。
  • 超炫酷HTML5 Canvas蝴蝶飛舞動畫
    收錄於話題 #炫酷動畫 插件簡介還記得早些時候我們為大家分享過一款非常炫酷的HTML5蝴蝶3D動畫,它是基於HTML5和SVG實現的,效果十分逼真。
  • 《每周一點canvas動畫》——3維環境搭建
    每周一點canvas動畫代碼文件在上一篇《每周一點canvas動畫》——從2D到3D中,我們討論了要在2D的平面實現3D的效果,是一件多麼複雜的事情
  • HTML5 Canvas火焰畫筆動畫
    收錄於話題 #炫酷動畫 插件簡介在上一篇文章中,我們分享了一個利用HTML5技術在Canvas上實現的煙花動畫,效果非常震撼。
  • 《每周一點canvas動畫》——差分函數的妙用
    每周一點canvas動畫代碼文件好像上次更新還是十一前,這唰唰唰的就過去大半個月了,現在更新我也沒什麼不好意思的。
  • 《每周一點canvas動畫》——3D物理效果
    在上一節《每周一點canvas動畫》——3維環境搭建中我們詳細的介紹了要想在2D的畫布上實現立體效果,需要做哪些事情。
  • 《每周一點canvas動畫》——3D點線與水波動畫
    每周一點canvas動畫代碼文件在上一章中,我們介紹了很多在三維環境下物體的運動效果。
  • 必備的Canvas接口和動畫效果大全
    它的底層是一個個像素,基本上<canvas>是一個可以用 JavaScript 操作的位圖(bitmap)。它與 SVG 圖像的區別在於,<canvas>是腳本調用各種方法生成圖像,SVG 則是一個 XML 文件,通過各種子元素生成圖像。使用 Canvas API 之前,需要在網頁裡面新建一個<canvas>元素。
  • 7款超華麗的HTML5 Canvas文字動畫特效
    在線演示/源碼下載2、超華麗CSS3 3D五彩發光文字動畫不久前我們已經為大家介紹過一些炫酷的CSS3文字動畫和HTML5文字特效,有些都非常不錯,比如最近剛分享的CSS3文字跳動旋轉動畫以及HTML5 Canvas幻彩火焰文字特效。
  • 每周一點 canvas 動畫丨差分函數的妙用(文末有福利)
    每周一點 canvas 動畫代碼文件:https://github.com/supperjet/H5-Animation/tree/master
  • 簡單的 canvas 翻角效果
    右上角需要從無的狀態撕開一個標記,且有動畫過程,上圖是實現的效果圖,不是gif。對這個翻角效果的難點在於沒有翻開的時候露出的是dom下面的內容,實現角度來說純dom + css動畫的設計方案並沒有相出一個好的對策: 於是撿起了好久之前學的入門級別的canvas:下面說一下實現思路。
  • 數學與canvas碰撞出環形進度條
    "canvasDemo" :width="canvasSize" :height="canvasSize" /></template>獲取繪圖上下文getContext('2d')方法返回一個用於在canvas上繪圖的環境,支持一系列2d繪圖API。
  • HTML5 超炫酷 3D 煙花動畫
    插件簡介今天要為大家展現一款非常絢麗的HTML5 Canvas 3D煙花動畫,和之前分享的這款HTML5製作一場精美的煙花盛宴相比
  • Canvas在超級瑪麗遊戲中的應用
    本文將會對 canvas 的一些基礎做一些大致的講解。canvas 基礎知識畫布元素canvas 標籤可以讓我們能夠使用 JavaScript 在網頁上繪製各種樣式的圖形。要訪問實際的繪圖接口, 首先我們需要創建一個上下文 (context), 它是一個對象, 提供了繪圖的接口。
  • 10個超讚的畫布Canvas SVG和CSS3相關的jQuery插件
    在今天的這篇文章中,我們將介紹10款幫助你構建完美UI,特效和動畫的jQuery插件。希望大家能夠喜歡!Percentage loader在我們以前的文章中我們介紹過這個canvas實現的強大進度條,它擁有性感迷人的UI界面,並且能夠提供給你方便的callback方法處理進度。相信大家一定會喜歡!
  • 仿掌閱app打開書籍動畫效果
    作者:瀟湘夜雨123連結:https://www.jianshu.com/p/8950d620b1d2打開書籍效果最近看到了掌閱app的打開動畫,感覺不錯,模仿了一下。首先看一下效果。這個效果通過打開書籍時的效果Camera來實現二維來模仿三維動畫(View沒有厚度是偽3D),並且放大畫布來實現的。什麼是Camera我們知道canvas用的是View的坐標系一個二維的坐標系。
  • Canvas 實現刮刮卡
    sousource-atop新圖形中與原有內容重疊的部分會被繪製,並覆蓋於原有內容之上lighter兩圖形中重疊部分作加色處理滑鼠點擊或者按住滑鼠移動的時候開始繪圖,繪圖的時候設置 context.globalCompositeOperation='destination-out'根據上面屬性的解釋,原有圖形(灰色矩形)與新圖形(畫的線條)不重疊的部分會被保留,所以畫過線條的部分不會被保留就可以看見下面機器貓圖片背景了。滑鼠抬起設置滑鼠按下標誌為 false,清空坐標數組。3.