canvas fillRect()
fillRect方法可以使用fillStyle指定的顏色填充矩形。
使用方式非常簡單,但是有些細節需要特別注意,後面會結合程式碼介紹。
語法結構:
[JavaScript] 純文字檢視 複製程式碼fillRect(x, y, width, height)
引數解析:
(1).x:必需,矩形左上角x軸座標。
(2).y:必需,矩形左上角y軸座標。
(3).width:必需,矩形的寬度。
(4).height:必需,矩形的高度。
關於座標系相關知識可以參閱canvas座標系原點一章節。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> window.onload = function () { let canvas = document.getElementById("canvas"); let ctx = canvas.getContext("2d"); ctx.fillStyle = "red"; ctx.fillRect(10, 10, 100, 50); } </script> </head> <body> <canvas id="canvas" width="400" height="450"></canvas> </body> </html>
程式碼執行效果截圖如下:
填充顏色是由fillStyle規定。
也可以設定填充透明度,程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> window.onload = function () { let canvas = document.getElementById("canvas"); let ctx = canvas.getContext("2d"); ctx.fillStyle = "rgba(100, 40, 40, 0.3)"; ctx.fillRect(10, 10, 100, 50); } </script> </head> <body> <canvas id="canvas" width="400" height="450"></canvas> </body> </html>
程式碼執行效果截圖如下:
也是通過fillStyle屬性設定,顏色值採用RGB方式。
更多設定透明度相關知識可以參閱canvas 設定透明度一章節。
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script> window.onload = function () { let canvas = document.getElementById("canvas"); let ctx = canvas.getContext("2d"); ctx.fillStyle = "red"; ctx.fillRect(10, 10, 100, 50); ctx.fillStyle = "blue"; ctx.fillRect(10, 80, 100, 50); } </script> </head> <body> <canvas id="canvas" width="400" height="450"></canvas> </body> </html>
程式碼執行效果截圖如下:
上述程式碼繪製了兩個不同顏色的矩形。
一切很正常,因為fillStyle屬性分別規定了紅色和藍色兩種填充色。
大家有沒有想過,後面設定的填充顏色為什麼沒有覆蓋前面的填充顏色。
看一段程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> canvas { border: 2px dotted #ccc; } </style> <script> window.onload = function () { var cvs = document.getElementById("canvas"); var ctx = cvs.getContext("2d"); ctx.lineWidth = 10; ctx.moveTo(10, 10); ctx.lineTo(100, 100); ctx.strokeStyle = "red"; ctx.stroke(); ctx.moveTo(10, 40); ctx.lineTo(100, 200); ctx.strokeStyle = "blue"; ctx.stroke(); } </script> </head> <body> <canvas id="canvas" width="738" height="280"></canvas> </body> </html>
程式碼執行效果截圖如下:
上述程式碼繪製了兩條直線,第一條直線設定描邊顏色為紅色,第二條直線設定描邊顏色為藍色。
但最終繪製效果是兩條直線都是藍色。
產生此現象的本質原因是由於這兩個直線在同一個路徑下,所以描邊會對整個路徑有效,所以後面的描邊會覆蓋在前面的描邊之上,於是兩個直線的都為藍色,更多內容參閱如下兩篇文章:
(1).canvas路徑與子路徑詳解一章節。
(2).canvas繪製圖案是重疊繪製而不是重置一章節。
想讓兩條直線分別顯示各自的描邊色,只要將兩條直線放置於不同的路徑直線即可。
程式碼修改如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> canvas { border: 2px dotted #ccc; } </style> <script> window.onload = function () { var cvs = document.getElementById("canvas"); var ctx = cvs.getContext("2d"); ctx.lineWidth = 10; ctx.moveTo(10, 10); ctx.lineTo(100, 100); ctx.strokeStyle = "red"; ctx.stroke(); // 開始一個新路徑 ctx.beginPath(); ctx.moveTo(10, 40); ctx.lineTo(100, 200); ctx.strokeStyle = "blue"; ctx.stroke(); } </script> </head> <body> <canvas id="canvas" width="738" height="280"></canvas> </body> </html>
程式碼執行效果截圖如下:
只要使用beginPath方法建立一個新的路徑即可。
由此可以猜想fillRect不但能夠填充矩形,而且還可以建立新路徑並清除之前路徑和子路徑的功能。
相關文章
- canvasCanvas
- WPF C# create canvas and draw ellipse in canvasC#Canvas
- canvas rect()Canvas
- canvas strokeStyleCanvas
- canvas lineTo()Canvas
- canvas strokeRect()Canvas
- canvas createRadialGradient()Canvas
- canvas createLinearGradient()Canvas
- canvas arc()Canvas
- canvas stroke()Canvas
- canvas fill()Canvas
- canvas fillStyleCanvas
- canvas setTransform()CanvasORM
- canvas transform()CanvasORM
- 初探canvasCanvas
- canvas closePath()Canvas
- canvas moveTo()Canvas
- canvas beginPath()Canvas
- canvas getContext()CanvasContext
- canvas getImageData()Canvas
- canvas isPointInPath()Canvas
- canvas putImageData()Canvas
- canvas drawImage()Canvas
- canvas clip()Canvas
- canvas arcTo()Canvas
- canvas createPattern()Canvas
- canvas createImageData()Canvas
- canvas restore()CanvasREST
- canvas translate()Canvas
- canvas rotate()Canvas
- canvas scale()Canvas
- canvas measureText()Canvas
- canvas fillText()Canvas
- canvas save()Canvas
- canvas clearRect()Canvas
- canvas(三)Canvas
- canvas toDataURL()Canvas
- canvas toBlob()Canvas