前端最基礎的就是 HTML+CSS+Javascript
。掌握了這三門技術就算入門,但也僅僅是入門,如今前端開發的定義已經遠遠不止這些。前端小課堂(HTML/CSS/JS
),本着提高技術水平,打牢基礎知識的中心思想,咱們開課啦(每週四)。css
canvas
是 HTML5
新增長的功能,用於操做繪製圖片。
能夠用於動畫、遊戲畫面、數據可視化、圖片編輯以及實時視頻處理等方面。
主要操做2D圖形。也能夠繪製3D圖形。html
ctx.globalCompositeOperation = 'destination-out'
國慶頭像。蹭熱點,請給我一面國旗@微信官方、democss3
<canvas id="canvas" width="300" height="300"></canvas>
web
ID
來方便查找height
爲畫布真實高度。單位:px。默認高度 150px。width
爲畫布真實寬度。單位:px。默認寬度 300px。
height
對應標籤上的 height 屬性width
對應標籤上的 width 屬性ctx = canvas.getContext('2d'); ctx.drawImage(img, 0, 0, 300, 300)
getContext()
返回繪製上下文環境對象。咱們須要使用返回的對象操做圖形。toBlob()
將圖片輸出爲Blob類型、異步toDataURL()
將圖片輸出爲DataURL類型、同步ctx = canvas.getContext(contextType[, contextAttributes])
chrome
contextType 須要返回的對象類型canvas
'2d'
返回 CanvasRenderingContext2D
對象,用來進行2D繪製。'webgl'
或'experimental-webgl'
返回WebGLRenderingContext(WebGL渲染上下文)對象,用於使用 webgl 進行 3D繪製。提供硬件3D加速渲染。對應的WebGL1(OpenGL ES 2.0) 'webgl2'
返回 WebGL2RenderingContext
對象,也是用於3D繪製。只不過對應 WebGL2(OpenGL ES 3.0) 'bitmaprenderer'
返回 ImageBitmapRenderingContext
contextAttributes 可選segmentfault
alpha
開啓透明該操做是異步的,因此須要傳入callback。api
callback
處理完成的回調函數。回調的第一個參數爲blob。mimeType
須要轉換的圖片類型,默認爲image/png
。quality
圖片質量,默認爲0.92
。該操做是同步的,因此大圖片會卡。data:[<mime type>][;base64],<data>
DataURL的格式。跨域
mimeType
須要轉換的圖片類型,默認爲image/png
。quality
圖片質量,默認爲0.92
。Access-Control-Allow-Origin
設置圖片的crossOrigin
var img = new Image(); img.crossOrigin = ''; img.onload = function () {}; img.src = url;
ctx.lineWidth
寬度。默認值:1,能夠有小數。單位:pxctx.lineCap
端點樣式,路徑起點和終點
lineWidth
爲直徑畫圓。lineWidth
是同樣,長度度是 lineWidth/2
。ctx.lineJoin
轉角樣式,路徑中的轉折點
miterLimit
能夠限制尖頭最長尺寸,長度大於限制值的會使用bevel
來處理。lineWidth
爲直徑畫圓。ctx.miterLimit
尖角限制閾值,針對線條粗角度小的狀況。默認值:10。若是ctx.lineJoin=miter
時,長度超出則使用平角顯示,若是長度不超出使用尖角顯示。ctx.lineDashOffset
虛線起始偏移量ctx.setLineDash()
設置虛線數值,數組。
[5]
等價於[5,5]
。[5,5]
等價於實線5px虛線5px[1,2,3]
等價於[實線1px,虛線2px,實線3px][1,2,3,4]
等價於[實線1px,虛線2px,實線3px,虛線4px]ctx.getLineDash()
獲取虛線數值,數組。font
字號、字體。
ctx.font='20px monospace'
textAlign
水平對齊方式。start(默認值)、end、left、right、center。 測試地址
start
表示指定的座標爲開始座標(左邊、direction 時會自動變化)。end
表示指定的座標爲結束座標(右邊、direction 時會自動變化)。left
表示指定的座標爲左邊座標。right
表示指定的座標爲右邊座標。center
表示指定的座標爲中心點。textBaseLine
基線對齊方式。top、hanging、middle、alphabetic(默認值)、ideographic、bottom。測試地址
direction
控制文本方向ctx.fillStyle
填充顏色。默認爲#000
黑色ctx.fillRect()
填充指定區域
ctx.fillRect(x, y, width, height);
ctx.fillText()
在指定區域繪製文本
ctx.fillText(text, x, y [, maxWidth]);
ctx.fill()
填充,須要有路徑,會自動閉合路徑
fillRule
爲填充規則 nonzero
、evenodd
。搞懂SVG/Canvas中nonzero和evenodd填充規則 張鑫旭 ctx.strokeStyle
描邊顏色。默認爲#000
黑色ctx.strokeRect()
描邊指定區域
ctx.strokeRect(x, y, width, height);
ctx.strokeText()
在指定區域繪製文本描邊
ctx.strokeText(text, x, y [, maxWidth]);
ctx.stroke()
描邊,須要有路徑,會自動閉合路徑
ctx.shadowBlur
陰影模糊大小,默認值:0ctx.shadowColor
陰影顏色,默認值:透明ctx.shadowOffsetX
陰影X軸偏移量,默認值:0ctx.shadowOffsetY
陰影Y軸偏移量,默認值:0ctx.beginPath()
開啓一個新路徑ctx.closePath()
關閉路徑繪製,區別在於描邊時。ctx.moveTo()
移動路徑的起始點ctx.moveTo(x, y);
ctx.lineTo()
繪製直線路徑到指定點ctx.lineTo(x, y);
ctx.bezierCurveTo()
繪製貝塞爾曲線路徑到指定點ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
ctx.quadraticCurveTo()
繪製二次貝塞爾曲線路徑到指定點ctx.quadraticCurveTo(cpx, cpy, x, y);
ctx.arc()
圓弧路徑ctx.arc(x, y, r, startAngle, endAngle [, anticlockwise]);
對應 圓心、半徑、起始角度(弧度)、結束角度(弧度)、繪製方向(默認 false 順時針)ctx.arcTo()
圓弧路徑ctx.arcTo(x1, y1, x2, y2, radius);
ctx.rect()
矩形路徑ctx.rect(x, y, width, height);
ctx.ellipse()
橢圓弧路徑ctx.ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise);
ctx.clip()
裁剪路徑。規定路徑只能夠在這個區域內。ctx.clip();
、ctx.clip(fillRule);
、ctx.clip(path, fillRule);
這裏就要說一下我以前的文章了(蹭熱點,請給我一面國旗@微信官方),使用這個功能來實現css3變換以後,轉換到canvas上。測試地址
變化測試地址
ctx.rotate()
旋轉ctx.rotate(angle);
,angle是弧度,angle = deg / 180 * Math.PIctx.scale()
縮放ctx.scale(x, y);
默認點是(0, 0)。默認值是(1, 1)。放大來說css和canvas是同樣的。不會影響以前的繪製。ctx.translate()
位置ctx.translate(x, y);
默認點是(0, 0)。默認值是(0, 0)。使用來講和css的差距很大。不會進行座標軸疊加。用於修改中心點操做。ctx.transform()
矩陣變化疊加ctx.setTransform()
矩陣變化不疊加
ctx.resetTransform()
重置矩陣變化ctx.getTransform()
獲取當前的矩陣變化值。ctx.createLinearGradient()
線性漸變ctx.createLinearGradient(x0, y0, x1, y1);
ctx.createRadialGradient()
徑向漸變ctx.createRadialGradient(x0, y0, r0, x1, y1, r1)
ctx.createPattern()
圖案ctx.createPattern(image, repetition);
HTMLImageElement
、HTMLVideoElement
、HTMLCanvasElement
、CanvasRenderingContext2D
、ImageBitmap
、ImageData
、Blob
。repeat
默認 平鋪、repeat-x
水平平鋪、repeat-y
垂直平鋪、no-repeat
不重複。ctx.drawImage()
繪製圖片到canvas上
ctx.drawImage(image, dx, dy);
圖片從cavnas座標開始繪製。ctx.drawImage(image, dx, dy, dWidth, dHeight);
圖片從canvas座標開始繪製,繪製寬高。ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);
圖片截取圖片的座標寬高,繪製到canvas的座標上。ctx.createImageData()
建立一個圖片數據對象,四位描述一個像素點爲rgba。ctx.getImageData()
獲取當前canvas的數據對象ctx.putImageData()
將數據對象繪製到canvas上ctx.clearRect()
清除指定區域內的全部內容ctx.measureText()
測量文本所佔據的寬度
ctx.measureText(text)
ctx.isPointInPath()
點是否在路徑內ctx.isPointInPath(x, y);
ctx.isPointInPath(x, y, fillRule);
ctx.isPointInPath(path, x, y);
ctx.isPointInPath(path, x, y, fillRule);
ctx.isPointInStroke()
點是否在路徑上ctx.isPointInStroke(x, y);
ctx.isPointInStroke(path, x, y);
ctx.save()
保存繪製狀態,入棧ctx.restore()
恢復繪製狀態,出棧ctx.canvas
dom對象的引用ctx.drawFocusIfNeeded()
ctx.scrollPathIntoView()