HTML5 Canvas 詳解

Hhy_9288發表於2018-04-20

什麼是 Canvas?

HTML5 的 canvas 元素使用 JavaScript 在網頁上繪製影象。

注:不過,<canvas> 元素本身並沒有繪製能力(它僅僅是圖形的容器) - 您必須使用指令碼來完成實際的繪圖任務。

建立 Canvas 元素

在頁面中新增canvas 元素    

<canvas id="myCanvas" width="200" height="100">

Your browser does not support the canvas element.

</canvas>

通過 JavaScript 來繪製

例項--矩形

<script type="text/javascript">

    var c=document.getElementById("myCanvas");  //javascript使用id來尋找canvas元素

    var cxt=c.getContext("2d");  // getContext("2d") 物件是內建的html5物件,擁有多種繪畫路徑、矩形、圓形、字元以及新增影象的方法。

    cxt.fillStyle="#FF0000";  //  fillStyle 設定或返回用於填充繪畫的顏色、漸變或模式

    cxt.fillRect(0,0,150,75);  //  fillRect  繪製“被填充”的矩形  fillRect(x,y,width,height)

</script>

例項--線條

<script type="text/javascript">

    var c=document.getElementById("myCanvas");  //javascript使用id來尋找canvas元素

    var cxt=c.getContext("2d"); // getContext("2d") 物件是內建的html5物件,擁有多種繪畫路徑、矩形、圓形、字元以及新增影象的方法。

    cxt.moveTo(10,10); // moveTo  把路徑移動到畫布中的指定點,不建立線條

    cxt.lineTo(150,50);  //  lineTo 新增一個新點,然後在畫布中建立從該點到最後指定點的線條 , lineTo(x,y) x、y座標

    cxt.lineTo(10,50);  //  最後指定的點

    var gradient=ctx.createLinearGradient(0,0,170,0);  //  createLinearGradient(x0,y0,x1,y1); x0,y0 為漸變開始點的xy座標 x1,y2為漸變結束點的xy座標

    gradient.addColorStop("0","magenta");

    gradient.addColorStop("0.5","blue");

    gradient.addColorStop("1.0","red");

    ctx.strokeStyle=gradient;  // 用漸變進行填充

    cxt.stroke();  // strokeTo  繪製已定義的路徑

</script>

例項--圓形  通過規定尺寸、顏色、位置來繪製一個圖

<script type="text/javascript">

    var c=document.getElementById("myCanvas"); //javascript使用id來尋找canvas元素

    var cxt=c.getContext("2d"); // getContext("2d") 物件是內建的html5物件,擁有多種繪畫路徑、矩形、圓形、字元以及新增影象的方法。

    cxt.fillStyle="#FF0000"; // fillStyle 設定或返回用於填充繪畫的顏色、漸變或模式

    cxt.beginPath();  // gebinPath() 起始一條路徑,或重置當前路徑。

    cxt.arc(70,18,15,0,Math.PI*2,true);  // 建立弧/曲線(用於建立圓形或部分圓)

    cxt.closePath();  //closePath()方法建立從當前點回到起始點的路徑。

    cxt.fill();  //   填充當前繪畫(路徑)

</script> 

getContext() 屬性和方法 

顏色、樣式和陰影

屬性描述
fillStyle設定或返回用於填充繪畫的顏色、漸變或模式
strokeStyle設定或返回用於筆觸的顏色、漸變或模式
shadowColor設定或返回用於陰影的顏色
shadowBlur設定或返回用於陰影的模糊級別
shadowOffsetX設定或返回陰影距形狀的水平距離
shadowOffsetY設定或返回陰影距形狀的垂直距離
方法描述
createLinearGradient()建立線性漸變(用在畫布內容上)
createPattern()在指定的方向上重複指定的元素
createRadialGradient()建立放射狀/環形的漸變(用在畫布內容上)
addColorStop()規定漸變物件中的顏色和停止位置

線條樣式

屬性描述
lineCap設定或返回線條的結束端點樣式
lineJoin設定或返回兩條線相交時,所建立的拐角型別
lineWidth設定或返回當前的線條寬度
miterLimit設定或返回最大斜接長度

矩形

方法描述
rect()建立矩形
fillRect()繪製“被填充”的矩形
strokeRect()繪製矩形(無填充)
clearRect()在給定的矩形內清除指定的畫素

路徑

方法描述
fill()填充當前繪圖(路徑)
stroke()繪製已定義的路徑
beginPath()起始一條路徑,或重置當前路徑
moveTo()把路徑移動到畫布中的指定點,不建立線條
closePath()建立從當前點回到起始點的路徑
lineTo()新增一個新點,然後在畫布中建立從該點到最後指定點的線條
clip()從原始畫布剪下任意形狀和尺寸的區域
quadraticCurveTo()建立二次貝塞爾曲線
bezierCurveTo()建立三次方貝塞爾曲線
arc()建立弧/曲線(用於建立圓形或部分圓)
arcTo()建立兩切線之間的弧/曲線
isPointInPath()如果指定的點位於當前路徑中,則返回 true,否則返回 false

轉換

方法描述
scale()縮放當前繪圖至更大或更小
rotate()旋轉當前繪圖
translate()重新對映畫布上的 (0,0) 位置
transform()替換繪圖的當前轉換矩陣
setTransform()將當前轉換重置為單位矩陣。然後執行 transform()

文字

屬性描述
font設定或返回文字內容的當前字型屬性
textAlign設定或返回文字內容的當前對齊方式
textBaseline設定或返回在繪製文字時使用的當前文字基線
方法描述
fillText()在畫布上繪製“被填充的”文字
strokeText()在畫布上繪製文字(無填充)
measureText()返回包含指定文字寬度的物件

影象繪製

方法描述
drawImage()向畫布上繪製影象、畫布或視訊

畫素操作

屬性描述
width返回 ImageData 物件的寬度
height返回 ImageData 物件的高度
data返回一個物件,其包含指定的 ImageData 物件的影象資料
方法描述
createImageData()建立新的、空白的 ImageData 物件
getImageData()返回 ImageData 物件,該物件為畫布上指定的矩形複製畫素資料
putImageData()把影象資料(從指定的 ImageData 物件)放回畫布上

合成

屬性描述
globalAlpha設定或返回繪圖的當前 alpha 或透明值
globalCompositeOperation設定或返回新影象如何繪製到已有的影象上

其他

方法描述
save()儲存當前環境的狀態
restore()返回之前儲存過的路徑狀態和屬性
createEvent() 
getContext() 
toDataURL() 

瀏覽器支援 

Internet Explorer 9、Firefox、Opera、Chrome 以及 Safari 支援 <canvas> 及其屬性和方法。

註釋:Internet Explorer 8 以及更早的版本不支援 <canvas> 元素。

參考文獻:http://www.w3school.com.cn/tags/html_ref_canvas.asp

https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLCanvasElement/getContext

總結: HTML5 <canvas> 標籤用於繪製影象、但本身沒有繪製能力,需要使用指令碼來完成繪圖。getContext()方法可返回物件,該物件提供了用於在畫布上繪圖的方法和屬性。

相關文章