還記得在過去的Web前端開發中,若是你須要繪圖或者生成相關圖形的話,使用Flash多是你惟一或者說最強大的實現方式,而在近些年的技術熱點HTML5標準中,HTML Canvas(畫布)可以更加方便的幫助你實現2D繪製圖形圖像及其各類動畫效果功能。javascript
首先咱們先來了解一下什麼是HTML Canvas?前端
咱們能夠在HTML中使用屬性width和height來定義Canvas。可是實現Canvas的相關功能主要還依賴於Javascript實現,即HTML5 Canvas API。咱們使用javascript來訪問和控制Canvas相關的區域,好比調用相關繪圖的方法,用來動態的生成須要的動畫或者圖形。java
接下來咱們來看看canvas的特性:web
互動性:Canvas支持互動,能夠很好的響應用戶的操做,咱們能夠經過Javascript來監鍵盤,鼠標,及其觸摸設備相關事件。canvas
動 畫:任何被canvas繪製的圖形均可以添加動畫,簡單的彈跳球或者複雜的HTML5遊戲均可以實現瀏覽器
靈活性:開發人員可使用Canvas來繪製任何的內容,好比,直線,圖形,文字,圖片等,能夠包含動畫或者不包含。同時你能夠添加音頻或者視頻瀏覽器支持:幾乎全部的現代瀏覽器都支持,而且被普遍的各類設備支持,例如,桌面,平板,智能手機等等。編輯器
流行度:canvas目前很流行,不少的開發人員都使用它來開發相似遊戲或者繪圖類應用工具
web標準:只須要有瀏覽器就能夠運行,而非flash或者silverlight,須要安裝相關的插件學習
開發一次,任何瀏覽器均可以運行(固然,不包括老式瀏覽器)開發工具
可使用免費擁有大量的開發工具及其類庫。
使用HTML5 Canvas咱們能開發那些相關產品或者應用呢?
1 可視化數據: 各種統計圖表,好比:百度的echart
2 場景秀:用Canvas實現動態的廣告效果可以很是融洽的跨平臺運行。如:手機中微產品.在移動端兼容性很好。
3 遊戲:canvas在基於Web的圖像顯示方面比Flash更加立體、更加精巧,canvas成爲HTML5小遊戲開發首選。現階段h5作遊戲,營業方式不是很明確. 25 超棒的 HTML5 Canvas 遊戲。
4 其餘可嵌入網站的內容 (多用於活動頁面、特效):相似圖表、音頻、視頻,還有許多元素可以更好地與Web融合,而且不須要任何插件。
5 趨勢=> 模擬器: 不管從視覺效果仍是核心功能方面來講,模擬器產品能夠徹底由JavaScript來實現。模擬真實硬件環境,如移動端各類類型手機.
6 趨勢=> 遠程計算機控制: Canvas可讓開發者更好地實現基於Web的數據傳輸,構建一個完美的可視化控制界面。
7 趨勢=> 圖形編輯器: Photoshop圖形編輯器將可以100%基於Web實現。
如何使用HTML5 Canvas?
使用HTML5 canvas其實很是簡單, 每個canvas都擁有一個上下文(context)。使用它你能夠來調用相關的畫布方法。
<canvas id="mycanvas" width="500" height ="400">
<p>您的瀏覽器不支持HTML5 Canvas</p>
</canvas>
以上代碼咱們在HTML中添加了一個canvas標籤,若是瀏覽器不支持canvas,會顯示<p>標籤的內容,固然,若是你須要支持老式瀏覽器你也可使用flash或者其它方法來作一個替代的解決方案。
var canvas = document.getElementById('mycanvas'),
context = canvas.getContext(‘2d’);
以上代碼咱們經過canvas取到2D的context。
在HTML5 Canvas的2D結構中,座標(0,0)在左上方,這和傳統的座標不太同樣。你們須要注意一下,以下圖所示:
下面來講一下canvas的API:
canvas的主要屬性和方法:
save():保存當前環境的狀態
restore():返回以前保存過的路徑狀態和屬性
createEvent()
getContext():返回一個對象,指出訪問繪圖功能必要的API
toDateURL():返回canvas圖像的URL
顏色、樣式和陰影屬性和方法:
fillStyle:設置或返回用於填充繪畫的顏色、漸變或模式
strokeStyle:設置或返回用於筆觸的顏色、漸變或模式
shadowColor:設置或返回用於陰影的顏色
shadowBlur:設置或返回用於陰影的模糊級別
shadowOffsetX:設置或返回陰影距形狀的水平距離
shadowOffsetY:設置或返回陰影距形狀的垂直距離
createLinearGradient():建立線性漸變(用在畫布內容上)
createPattern():在指定的方向上重複指定的元素
createRadialGradient():建立放射狀/環形的漸變(用在畫布內容上)
addColorStop():規定漸變對象中的顏色和中止位置
線條樣式屬性和方法
lineCap:設置或返回線條的結束端點樣式
lineJoin:設置或返回兩條線相交時,所建立的拐角類型
lineWidth:設置或返回當前的線段寬度
miterLimit:設置或返回最大斜接長度
Canvas的API-路徑方法
fill():填充當前繪圖(路徑)
stroke():繪製已定義的路徑
beginPath():起始一條路徑,或重置當前路徑
moveTo():把路徑移動到畫布中的指定點,不建立線條
closePath():建立從當前點回到起始點的路徑
lineTo():添加一個新點,建立從該點到最後指定點的線條
clip():從原始畫布剪切任意形狀和尺寸的區域
quadraticCurveTo():建立二次貝塞爾曲線
bezierCurveTo():建立三次貝塞爾曲線
arc():建立弧/曲線(用於建立圓形或部分圓)
arcTo():建立兩切線之間的弧/曲線
isPointInPath():若是指定的點位於當前路徑中,返回布爾值
Canvas的API-轉換方法
scale():縮放當前繪圖至更大或更小
rotate():旋轉當前繪圖
translate():從新映射畫布上的(0,0)位置
transform():替換繪圖的當前轉換矩陣
setTransform():將當前轉換重置爲單位矩陣,而後運行transform()
Canvas的API-文本屬性和方法
font:設置或返回文本內容的當前字體屬性
textAlign:設置或返回文本內容的當前對齊方式
textBaseline:設置或返回在繪製文本時使用的的當前文本基線
fillText():在畫布上繪製「被填充的」文本
strokeText():在畫布上繪製文本(無填充)
measureText():返回包含指定文本寬度的對象
Canvas的API-圖像繪製方法
drawImage():向畫布上繪製圖像、畫布或視頻
Canvas的API-像素操做方法和屬性
width:返回ImageData對象的寬度
height:返回ImageData對象的高度
data:返回一個對象,其包含指定的ImageData對象的圖像數據
createImageData():建立新的、空白的I馬哥Data對象
getImageData():返回ImageData對象,該對象爲畫布上指定的矩形複製像素數據
putImageData():把圖像數據(從指定的ImageData對象)放回畫布上
Canvas的API-圖像合成屬性
globalAlpha:設置或返回繪圖的當前alpha或透明值
globalCompositeOperation:設置或返回新圖像如何繪製到已有的圖像上
直接使用Canvas來繪製圖形相對來講比較乏味而且麻煩,因此在現代的HTML5 Canvas中咱們使用一些現成的第三方類庫幫助咱們多快好省的實現圖形繪製的功能:
KineticJS
Paper.js
EaselJS
Fabric.js
oCanvas
Echart.js