當前位置:
首頁 > 最新 > HTML5的canvas繪圖技術詳解

HTML5的canvas繪圖技術詳解

本篇教程探討了HTML5的canvas繪圖技術詳解,希望閱讀本篇文章以後大家有所收穫,幫助大家HTML5+CSS3從入門到精通 。

canvas元素是HTML5中新添加的一個元素,該元素是HTML5中的一個亮點。Canvas元素就像一塊畫布,通過該元素自帶的API結合JavaScript代碼可以繪製各種圖形和圖像以及動畫效果。

1.1 瀏覽器不兼容問題

ie9以上才支持canvas, 其他chrome、firefox、蘋果瀏覽器等都支持

只要瀏覽器兼容canvas,那麼就會支持絕大部分api(個別最新api除外)

移動端的兼容情況非常理想,基本上隨便使用

2d的支持的都非常好,3d(webgl)ie11才支持,其他都支持

如果瀏覽器不兼容,最好進行友好提示,提示內容只有在瀏覽器不支持時才顯示。

//例如:

你的瀏覽器不支持canvas,請升級瀏覽器

瀏覽器不兼容,也可以使用flash等手段進行優雅降級

1.2 創建畫布

在頁面中創建canvas元素與創建其他元素一樣,只需要添加一個標記即可。該元素默認的寬高為300*15,可以通過元素的width屬性和height屬性改變默認的寬高。

注意:

不能使用CSS樣式控制canvas元素的寬高,否則會導致繪製的圖形拉伸。

重新設置canvas標籤的寬高屬性會導致畫布擦除所有的內容。

可以給canvas畫布設置背景色

1.3 canvas坐標系

在開始繪製任何圖像之前,我們先講一下canvas的坐標系。canvas坐標系是以左上角0,0處為坐標原點,水平方向為x軸,向右為正;垂直方向為y軸,向下為正。如下圖所示:

1.4 繪製線徑

獲取上下文對象(CanvasRenderingContext2D)

首先,獲取canvas元素,然後調用元素的getContext(「2d」)方法,該方法返回一個CanvasRenderingContext2D對象,使用該對象就可以在畫布上繪圖了。

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

var mcontext = mcanvas.getContext("2d");

2.設置繪製起點(moveTo)

//語法:

ctx.moveTo(x, y);

* 解釋:設置上下文繪製路徑的起點。相當於移動畫筆到某個位置。

* 參數:x,y 都是相對於 canvas坐標系的原點(左上角)。

* 注意: 繪製線段前必須先設置起點,不然繪製無效。如果不進行設置,就會使用lineTo的坐標當作moveTo

3.繪製直線(lineTo)

//語法:

ctx.lineTo(x, y);

* 解釋:從上一步設置的繪製起點繪製一條直線到(x, y)點。

* 參數:x,y 目標點坐標。

4.路徑的開始和閉合

//開始路徑:

ctx.beginPath();

//閉合路徑:

ctx.closePath();

* 解釋:如果繪製路徑比較複雜,必須使用路徑開始和結束。閉合路徑會自動把最後的線頭和開始的線頭連在一起。

* beginPath: 核心的作用是將不同繪製的形狀進行隔離,每次執行此方法,表示重新繪製一個路徑,跟之前的繪製的墨跡可以進行分開樣式設置和管理。

5.繪製圖形(stroke)

//語法:

ctx.stroke();

* 解釋:根據路徑繪製線。路徑只是草稿,真正繪製線必須執行stroke

在繪製之前,還可以對畫筆的顏色和粗細進行設置進行設置,方法如下:

//語法:

ctx.strokeStyle = 「#ff0000」;

ctx.lineWidth = 4; //值為不帶單位的數字,並且大於0

6.填充圖形(fill)

//語法:

ctx.fill();

* 解釋:對已經畫好的圖形進行填充顏色。

在填充之前,同樣可以對所填充的顏色進行設置,方法如下:

//語法:

ctx.fileStyle = 「#0000ff」;

7.canvas繪製的基本步驟:

第一步:獲得上下文 =>canvasElem.getContext("2d");

第二步:開始路徑規劃 =>ctx.beginPath()

第三步:移動起始點 =>ctx.moveTo(x, y)

第四步:繪製線(線條、矩形、圓形、圖片...) =>ctx.lineTo(x, y)

第五步:閉合路徑 =>ctx.closePath();

第六步:繪製描邊 =>ctx.stroke();

案例:通過上面所學的方法繪製一個三角形。

你的瀏覽器不支持canvas,請升級瀏覽器

案例:理解canvas基於狀態的繪圖

你的瀏覽器不支持canvas,請升級瀏覽器

1.6 繪製圓形

arc() 方法用於創建弧線(用於創建圓或部分圓)。

語法:ctx.arc(x, y, r, startAngle, endAngle, counterclockwise);

解釋:

x,y:圓心坐標。

r:半徑大小。

sAngle:繪製開始的角度。 圓心到最右邊點是0度,順時針方向弧度增大。

eAngel:結束的角度,注意是弧度。

counterclockwise:是否是逆時針,默認是false。true是逆時針,false:順時針

注意:弧度和角度的轉換公式: rad = deg*Math.PI/180;

繪製圓形和餅圖

你的瀏覽器不支持canvas,請升級瀏覽器

三角函數的補充:

Math.sin(弧度); //夾角對面的邊 和 斜邊的比值

Math.cos(弧度); //夾角側邊與斜邊的比值

圓形上面的點的坐標的計算公式

x =x0 + Math.cos(rad) * R;//x0和y0是圓心點坐標

y =y0 + Math.sin(rad) * R;//注意都是弧度

1.7 繪製文字

canvas 提供了兩種方法來渲染文本:

fillText(text, x, y [, maxWidth])

在指定的(x,y)位置填充指定的文本,繪製的最大寬度是可選的.

strokeText(text, x, y [, maxWidth])

在指定的(x,y)位置繪製文本邊框,繪製的最大寬度是可選的.

示例1

文本用當前的填充方式被填充:

var ctx = document.getElementById("canvas").getContext("2d");

ctx.font = "48px serif";

ctx.fillText("Hello world", 10, 50);

示例2

文本用當前的邊框樣式被繪製:

var ctx = document.getElementById("canvas").getContext("2d");

ctx.font = "48px serif";

ctx.strokeText("Hello world", 10, 50);

文本樣式

font = value: 當前我們用來繪製文本的樣式. 這個字元串使用和 CSS font 屬性相同的語法. 默認的字體是 10px sans-serif。

textAlign = value: 文本對齊選項. 可選的值包括:start, end, left, right or center. 默認值是 start。

textBaseline = value: 基線對齊選項. 可選的值包括:top, hanging, middle, alphabetic, ideographic, bottom。默認值是 alphabetic。

代碼示例:

你的瀏覽器不支持canvas,請升級瀏覽器

1.8繪製圖像

1.基本繪製圖片的方式

context.drawImage(img,x,y);

參數說明: x,y 繪製圖片左上角的坐標, img是繪製圖片的dom對象。

2.在畫布上繪製圖像,並規定圖像的寬度和高度

context.drawImage(img,x,y,width,height);

參數說明:width 繪製圖片的寬度, height:繪製圖片的高度

如果指定寬高,最好成比例,不然圖片會被拉伸

設置高 = 原高度 * 設置寬/ 原寬度;

3.圖片裁剪,並在畫布上定位被裁剪的部分

context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);

參數說明:

sx,sy 裁剪的左上角坐標,

swidth:裁剪圖片的高度。 sheight:裁剪的高度

其他同上

4.用javascript創建img對象

上面提供的3個方法,都需要一個Image對象作為參數,下面介紹了幾種創建Image對象的方式。需要注意的是,為Image的src屬性賦值後,Image對象會去裝載指定圖片,但這種裝載是非同步的,如果圖片太大或則圖片來自網路,且網路傳輸速度慢,Image對象裝載圖片就會需要:一定的時間開銷。為了保證圖片裝載完成後才去繪製圖片,可以監聽Image對象的onload回調事件,然後在事件處理函數中繪製圖片,如下所示:

第一種方式:

var img = document.getElementById("imgId");

img.onload = function(){ //圖片載入完成後,執行此方法

mcontext.drawImage(img, 10, 10);

}

第二種方式:

var img = document.createElement("img");

img.src = "img/a.jpg";

img.alt = "誰笑誰是小狗";

img.onload = function(){ //圖片載入完成後,執行此方法

mcontext.drawImage(img, 10, 10);

}

第三種方式:

var img = new Image();//這個就是 img標籤的dom對象

img.src = "imgs/arc.gif";

img.alt = "誰笑誰是小狗";

img.onload = function() { //圖片載入完成後,執行此方法

}

本文由職坐標整理並發布,希望對同學們有所幫助。了解更多詳情請關注職坐標WEB前端HTML5/CSS3頻道!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 職坐標在線 的精彩文章:

給你一個webAPP,應該如何運行起來?

TAG:職坐標在線 |