ç¶²æ ¼(Grid)
å¨éå§ç¹ªååï¼æåå¿ é å äºè§£ç«å¸ (canvas) ç¶²æ ¼ï¼æèæ¯èªªåº§æ¨ç©ºéãå¨åä¸é æå¸ä¸ç HTML ç¯æ¬æä¸å寬 150 pixels (åç´ )ãé« 150 pixels çç«å¸ãå¦å³åï¼ä½ å¨ç«å¸é è¨ç¶²æ ¼ä¸ç¹ªåï¼ç¶²æ ¼ä¸ 1 å®ä½ç¸ç¶æ¼ç«å¸ä¸ 1 pixelï¼ç¶²æ ¼çåé» (åº§æ¨ (0, 0) ) åè½æ¼å·¦ä¸è§ï¼ææå ç´ å®ä½çç¸å°æ¼æ¤å·¦ä¸è§åé»ï¼æä»¥èè²æ¹å¡çä½ç½®çºå¾å·¦å¾å³æ¨ x pixelsãå¾ä¸å¾ä¸æ¨ y pixels (亦å³åº§æ¨ (x, y) )ãç¾å¨æåå å°æ³¨å¨é è¨è¨å®ä¸ï¼ä¹å¾æåæçå°å¦ä½è½æåé»ä½ç½®ãæè½ç¶²æ ¼ä»¥å縮æ¾ç¶²æ ¼ã
ç«ç©å½¢ä¸åæ¼SVGï¼<canvas>
åªæ¯æ´ä¸ç¨®åå§åå½¢ï¼ç©å½¢ãææçåå½¢é½å¿
é ç±ä¸æå¤å繪åè·¯å¾æ§æï¼èæåæ£å¥½æä¸äºç¹ªåè·¯å¾å½æ¸å¯ä»¥è®æåç«åºè¤éçåå½¢ã
é¦å ä¾ççç©å½¢ï¼å ±æä¸åç©å½¢ç¹ªå彿¸:
fillRect(x, y, width, height)
ç«åºä¸å填滿çç©å½¢ã
strokeRect(x, y, width, height)
ç«åºä¸åç©å½¢çéæ¡
clearRect(x, y, width, height)
æ¸ é¤æå®ç©å½¢ååå §çå §å®¹ï¼ä½¿å ¶è®çºå ¨éæã
éä¸å彿¸é½æ¥å䏿¨£ç忏: x, y 代表å¾åé»åºç¼ç座æ¨ä½ç½®ï¼width, height 代表ç©å½¢ç寬é«ã
ç©å½¢ç¯ä¾<html>
<body onload="draw();">
<canvas id="canvas" width="150" height="150"></canvas>
</body>
</html>
function draw() {
var canvas = document.getElementById("canvas");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
ctx.fillRect(25, 25, 100, 100);
ctx.clearRect(45, 45, 60, 60);
ctx.strokeRect(50, 50, 50, 50);
}
}
æ¬ä¾çµæå¦ä¸:
fillRect()彿¸ç«åºä¸å寬é«é½ 100 pixels çç©å½¢ï¼clearRect()彿¸æ¸ é¤ä¸å¤® 60 x 60 pixels å¤§çæ£æ¹å½¢ååï¼æ¥è strokeRect()å¨è¢«æ¸ é¤ååå §ç«ä¸ä¸å 50 x 50 pixels çç©å½¢éæ¡ã
ä¹å¾æåæçå°å¦å¤å ©ç¨®ä»£æ¿ clearRect()çæ¹æ³ï¼éæå¦ä½æ¹è®åå½¢é¡è²èçç«æ¨£å¼ã
ä¸åä¹å¾æçå°çè·¯å¾ç¹ªå彿¸ï¼éä¸å彿¸æç«å³å¨ç«å¸ä¸ç«åºç©å½¢ã
è·¯å¾ç¹ªè£½ä½¿ç¨è·¯å¾ (path) ä¾ç«åå½¢éè¦å¤ä¸é»æ¥é©ï¼ä¸éå§å ç¢çè·¯å¾ï¼ç¶å¾ç¨ç¹ªåæä»¤ç«åºè·¯å¾ï¼ç¶å¾åçµæè·¯å¾ï¼ä¸æ¦è·¯å¾ç¢çå¾ä¾¿å¯ä»¥ç¨ç«çæå¡«æ»¿æ¹å¼ä¾æ¸²æçæï¼é裡æ¯ä¸äºå¯ç¨å½æ¸:
beginPath()
ç¢çä¸åæ°è·¯å¾ï¼ç¢çå¾å使ç¨ç¹ªåæä»¤ä¾è¨å®è·¯å¾ã
closePath()
éåè·¯å¾å¥½è®æ°ç繪åæä»¤ä¾è¨å®è·¯å¾ã
è·¯å¾ APIï¼éäº API 便æ¯ç¹ªåæä»¤
stroke()
ç«åºåå½¢çéæ¡ã
fill()
填滿路å¾å §å®¹ååä¾ç¢çåå½¢ã
ç¬¬ä¸æ¥å¼å« beginPath() ç¢çä¸åè·¯å¾ï¼è¡¨é¢ä¸ï¼è·¯å¾æè¢«åå¨ä¸åæ¬¡è·¯å¾ (sub-path) æ¸ å®ä¸ï¼ä¾å¦ç´ç·ãæ²ç·çï¼éäºæ¬¡è·¯å¾éåèµ·ä¾å°±å½¢æä¸å¡åå½¢ãæ¯ä¸æ¬¡å¼å«éåæ¹æ³ï¼æ¬¡è·¯å¾æ¸ å®å°±æè¢«éè¨ï¼ç¶å¾æå便è½å¤ ç«å¦ä¸åæ°åå½¢ã
åè¨»ï¼ ç¶ç®åè·¯å¾çºç©º(ä¾å¦æ¥èå¼å« beginPath()å®å¾)ææ¯å¨ä¸åæ°ç«å¸ä¸ï¼ä¸è«çºä½ï¼ç¬¬ä¸åè·¯å¾ç¹ªåæä»¤ç¸½æ¯ moveTo()ï¼å çºæ¯ç¶éè¨è·¯å¾å¾ï¼ä½ å¹¾ä¹é½æéè¦è¨å®ç¹ªåèµ·å§é»ã
ç¬¬äºæ¥æ¯å¼å«å弿¹æ³ä¾å¯¦éè¨å®ç¹ªåè·¯å¾ï¼ç¨å¾æåå°æä»ç´¹éé¨åã
ç¬¬ä¸æ¥ï¼ä¹æ¯éå¿ è¦ç䏿¥ï¼å°±æ¯å¼å« closePath()ãéåæ¹æ³æå¨ç¾å¨æå¨é»å°èµ·å§é»éç«ä¸æ¢ç´ç·ä»¥éååå½¢ï¼å¦æå形已ç¶éåææ¯åªå«ä¸åé»ï¼éåæ¹æ³ä¸ææä»»ä½ææã
åè¨»ï¼ ç¶å¼å« fill()ï¼ä»»ä½éæ¾çå形齿èªåéåï¼æä»¥ä¸éè¦åå¼å« closePath()ï¼ä½æ¯ stroke()並é妿¤ã
ç«ä¸åä¸è§å½¢éæ¯ä¸åç«åºä¸è§å½¢çç¨å¼ç¢¼ç¯ä¾ã
<html>
<body onload="draw();">
<canvas id="canvas" width="150" height="150"></canvas>
</body>
</html>
function draw() {
var canvas = document.getElementById("canvas");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(75, 50);
ctx.lineTo(100, 75);
ctx.lineTo(100, 25);
ctx.fill();
}
}
çµæå¦ä¸:
ç§»åç«çmoveTo()æ¯ä¸å徿ç¨ç彿¸ï¼moveTo()䏿ç«ä»»ä½åå½¢ï¼ä½å»æ¯ä¸è¿°è·¯å¾æ¸ å®çä¸é¨åï¼éå¤§æ¦æé»åæ¯æçå¾ç´ä¸ä¸é»æèµ·ä¾ï¼ç¶å¾æ¾å°å¦ä¸åé»ã
moveTo(x, y)
ç§»åç«çå°æå®ç(x, y)座æ¨é»
ç¶åå§åç«å¸ææ¯å¼å« beginPath()ï¼éå¸¸ææ³è¦ä½¿ç¨ moveTo()便å®èµ·å§é»ï¼æåå¯ä»¥ç¨ moveTo()ç«ä¸é£çµçè·¯å¾ï¼çä¸ä¸ç¬èåç¯ä¾ï¼åä¸ç´ ç·å³çºä½¿ç¨å° moveTo()çä½ç½®ã
ä½ å¯ä»¥æ¿ä¸é¢çç¨å¼ç¢¼ï¼æ¾é²å åç draw()彿¸ï¼èªå·±è©¦è©¦çææã
<html>
<body onload="draw();">
<canvas id="canvas" width="150" height="150"></canvas>
</body>
</html>
function draw() {
var canvas = document.getElementById("canvas");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.arc(75, 75, 50, 0, Math.PI * 2, true); // Outer circle
ctx.moveTo(110, 75);
ctx.arc(75, 75, 35, 0, Math.PI, false); // Mouth (clockwise)
ctx.moveTo(65, 65);
ctx.arc(60, 65, 5, 0, Math.PI * 2, true); // Left eye
ctx.moveTo(95, 65);
ctx.arc(90, 65, 5, 0, Math.PI * 2, true); // Right eye
ctx.stroke();
}
}
çµæå¦ä¸:
ç§»é¤ moveTo() 便å¯ä»¥çå°ç·æ¢é£çµèµ·ä¾ã
åè¨»ï¼ æé arc()ï¼è«åç §ä¸æ¹å¼§å½¢ã
ç·æ¢ç¨ lineTo() æ¹æ³ç«ç´ç·ã
lineTo(x, y)
å¾ç®å繪åé»ç«ä¸æ¢ç´ç·å°æå®ç(x, y)座æ¨é»ã
æ¬æ¹æ³æ¥å x, y 忏ä½çºç·æ¢çµæé»ç座æ¨ä½ç½®ï¼è³æ¼èµ·å§é»åè¦åä¸å繪åè·¯å¾ï¼ç±åä¸å繪åè·¯å¾ççµæé»ä½çºèµ·å§é»ï¼ç¶ç¶ï¼èµ·å§é»ä¹å¯ä»¥ç¨ moveTo()æ¹æ³ä¾è®æ´ã
ä¸é¢ç«å ©åä¸è§å½¢ï¼ä¸å填滿ï¼ä¸å空å¿ã
<html>
<body onload="draw();">
<canvas id="canvas" width="150" height="150"></canvas>
</body>
</html>
function draw() {
var canvas = document.getElementById("canvas");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
// Filled triangle
ctx.beginPath();
ctx.moveTo(25, 25);
ctx.lineTo(105, 25);
ctx.lineTo(25, 105);
ctx.fill();
// Stroked triangle
ctx.beginPath();
ctx.moveTo(125, 125);
ctx.lineTo(125, 45);
ctx.lineTo(45, 125);
ctx.closePath();
ctx.stroke();
}
}
å¾å¼å« beginPath()èµ·å§ä¸åæ°å形路å¾ï¼ç¶å¾ç¨ moveTo()ç§»å°æåæ³è¦çèµ·å§é»ï¼ç¶å¾åç«å ©æ¢ç·å½¢æä¸è§å½¢çå ©éã
æåå¯ä»¥çå°å¡«æ»¿(fill)ä¸è§å½¢åå¾å(stroke)ä¸è§å½¢çåå¥ï¼ç¶å¡«æ»¿æï¼åå½¢æèªåéåï¼ä¸éå¾ååä¸æï¼æä»¥å¦ææ²æå¼å« closePaht()ç話ï¼åªæç«åºå ©æ¢ç·èéä¸è§å½¢ã
å¼§å½¢ç¨ arc()æ¹æ³ä¾ç«å¼§å½¢æåå½¢ãéç¶ä¹å¯ä»¥ç¨ arcTo()ï¼ä½éåæ¹æ³æ¯è¼ä¸å¯é ï¼æä»¥é裡æåä¸è¨è« arcTo()ã
arc(x, y, radius, startAngle, endAngle, anticlockwise)
ç«ä¸åå¼§å½¢
æ¬æ¹æ³æ¥åäºå忏: x, y 代表åå¿åº§æ¨é»ï¼radius 代表åå¾ï¼startAngle, endAngle åå¥ä»£è¡¨æ²¿èå¼§å½¢æ²ç·ä¸çèµ·å§é»èçµæé»ç弧度ï¼å¼§åº¦æ¸¬éæ¯ç¸å°æ¼ x 軸ï¼anticlockwise çº true 代表éæéä½åãfalse ä»£è¡¨é æéä½åã
åè¨»ï¼ arc()æ¹æ³ç¨çæ¯å¼§åº¦(radians)èéè§åº¦(degrees)ï¼å¦æè¦å¨å¼§åº¦èè§åº¦éæç®ï¼å¯ä»¥å©ç¨ä»¥ä¸ javascript ç¨å¼ç¢¼: radians = (Math.PI/180) * degrees.
以ä¸ä¾åæ¯è¼è¤éï¼å®æç«åº 12 åä¸åçå¼§å½¢ã
å ©å for è¿´åèµ°ä¸éå¼§å½¢ååçåè·è¡ï¼æ¯ä¸åå¼§å½¢ç±å¼å« beginPath()éå§æ°ç繪åè·¯å¾ï¼çºäºæ¸ æ¥ï¼æåå¨ç¨å¼ç¯ä¾ä¸ç¨è®æ¸å²å忏ï¼ä½ ä¸ä¸å®è¦é麼åã
x, y 座æ¨é»çé¨åæè©²ç¸ç¶æ·ºé¡¯ï¼radius å startAngle æ¯å®å¼ï¼endAngle å¾ 180 度(åå)éå§ï¼ç¶å¾æ¯ä¸è¡å¢å 90 åº¦ï¼æå¾ä¸è¡ä¾¿æå½¢æä¸å宿´çåã
第 1, 3 åç anticlockwise çº falseï¼æä»¥æé æéä½åï¼2, 4 åç anticlockwise çº trueï¼æä»¥æéæéä½åãæå¾ç if 決å®ä¸å鍿¯ç¨å¡«æ»¿åå½¢ï¼ä¸å鍿¯å¾ååå½¢ã
<html>
<body onload="draw();">
<canvas id="canvas" width="150" height="200"></canvas>
</body>
</html>
function draw() {
var canvas = document.getElementById("canvas");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
for (var i = 0; i < 4; i++) {
for (var j = 0; j < 3; j++) {
ctx.beginPath();
var x = 25 + j * 50; // x coordinate
var y = 25 + i * 50; // y coordinate
var radius = 20; // Arc radius
var startAngle = 0; // Starting point on circle
var endAngle = Math.PI + (Math.PI * j) / 2; // End point on circle
var anticlockwise = i % 2 == 0 ? false : true; // clockwise or anticlockwise
ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise);
if (i > 1) {
ctx.fill();
} else {
ctx.stroke();
}
}
}
}
}
è²è²æ²ç·èäºæ¬¡æ²ç·
äºæ¬¡è䏿¬¡è²è²æ²ç·æ¯å¦ä¸ç¨®å¯ç¨ä¾æ§æè¤éææ©åå½¢çè·¯å¾ã
quadraticCurveTo(cp1x, cp1y, x, y)
å¾ç®åèµ·å§é»ç«ä¸æ¢äºæ¬¡è²è²æ²ç·å° x, y æå®ççµé»ï¼æ§å¶é»ç± cp1x, cp1y æå®ã
bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)
å¾ç®åèµ·å§é»ç«ä¸æ¢ä¸æ¬¡è²è²æ²ç·å° x, y æå®ççµé»ï¼æ§å¶é»ç±(cp1x, cp1y)å(cp2x, cp2y)æå®ã
äºæ¬¡å䏿¬¡çå·®å¥å¯ä»¥å¾å³åçåºï¼è²è²æ²ç·çèµ·å§åçµé»ä»¥è黿¨ç¤ºï¼å ¶ä¸äºæ¬¡è²è²æ²ç·åªæä¸åæ§å¶é»(å¦ç´ 黿¨ç¤º)è䏿¬¡è²è²æ²ç·æå ©åæ§å¶é»ã
äºæ¬¡å䏿¬¡è²è²æ²ç·é½ç¨ x, y 忏å®ç¾©çµé»åº§æ¨ï¼ç¶å¾ç¨ cp1x, xp1y å®ç¾©ç¬¬ä¸åæ§å¶é»åº§æ¨ãcp2x, xp2y å®ç¾©ç¬¬äºåæ§å¶é»åº§æ¨ã
ç¨äºæ¬¡å䏿¬¡è²è²æ²ç·ä½åç¸ç¶å ·æææ°æ§ï¼å çºä¸åä½¿ç¨ Adobe illustrator çåé繪åè»é«ï¼æåå¨ç¹ªåæç¡æ³å³æçå°ç¹ªåçæ³ï¼æä»¥ç«è¤éçåå½¢ååå°é£ãä¸é¢çç¯ä¾æåç«äºä¸äºåå½¢ï¼å¦æä½ ææéèèå¿ï¼å¯ä»¥ç«åºæ´è¤éçåå½¢ã
äºæ¬¡è²è²æ²ç·æ¬ä¾ç¨äºæ¸åäºæ¬¡è²è²æ²ç·ç«äºä¸åæè©±æ¡ã
<html>
<body onload="draw();">
<canvas id="canvas" width="150" height="150"></canvas>
</body>
</html>
function draw() {
var canvas = document.getElementById("canvas");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
// Quadratric curves example
ctx.beginPath();
ctx.moveTo(75, 25);
ctx.quadraticCurveTo(25, 25, 25, 62.5);
ctx.quadraticCurveTo(25, 100, 50, 100);
ctx.quadraticCurveTo(50, 120, 30, 125);
ctx.quadraticCurveTo(60, 120, 65, 100);
ctx.quadraticCurveTo(125, 100, 125, 62.5);
ctx.quadraticCurveTo(125, 25, 75, 25);
ctx.stroke();
}
}
䏿¬¡è²è²æ²ç·
éåç¯ä¾ç«äºä¸åæå¿ã
<html>
<body onload="draw();">
<canvas id="canvas" width="150" height="150"></canvas>
</body>
</html>
function draw() {
var canvas = document.getElementById("canvas");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
// Quadratric curves example
ctx.beginPath();
ctx.moveTo(75, 40);
ctx.bezierCurveTo(75, 37, 70, 25, 50, 25);
ctx.bezierCurveTo(20, 25, 20, 62.5, 20, 62.5);
ctx.bezierCurveTo(20, 80, 40, 102, 75, 120);
ctx.bezierCurveTo(110, 102, 130, 80, 130, 62.5);
ctx.bezierCurveTo(130, 62.5, 130, 25, 100, 25);
ctx.bezierCurveTo(85, 25, 75, 37, 75, 40);
ctx.fill();
}
}
ç©å½¢
é¤äºå¨{ç«ç©å½¢}段è½ä¸æå°çä¸åæ¹æ³ï¼éæ rect()æ¹æ³è½å¤ å¨ç«å¸ä¸ç«ç©å½¢ï¼rect()æ¹æ³æå¨ç®åè·¯å¾ä¸å å ¥ä¸åç©å½¢ç¹ªåè·¯å¾ã
rect(x, y, width, height)
ç«ä¸åå·¦ä¸è§ä½æ¼(x, y)ã寬 widthãé« height çç©å½¢ã
å¼å«éåæ¹æ³ï¼moveTo()æ¹æ³æä»¥(0, 0)åæ¸è¢«èªåå¼å«ï¼æä»¥ç®åçä¸çé»è·è èªå被è¨çºé è¨åº§æ¨ã
夿¨£çµåæªè³ç®åçºæ¢ï¼æåé½åªç¨ä¸ç¨®è·¯å¾å½æ¸å¨ååç¯ä¾è£¡ä½åï¼ä¸éï¼å ¶å¯¦ç¹ªåæä¸¦æ²æä»»ä½ä½¿ç¨æ¸éæç¨®é¡ä¸çè·¯å¾å½æ¸éå¶ï¼æä»¥æå¾æåä¾è©¦èçµå忍£è·¯å¾ç¹ªå彿¸ä¾ç«ä¸äºååæåçéæ²è§è²ã
<html>
<body onload="draw();">
<canvas id="canvas" width="150" height="150"></canvas>
</body>
</html>
function draw() {
var canvas = document.getElementById("canvas");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
roundedRect(ctx, 12, 12, 150, 150, 15);
roundedRect(ctx, 19, 19, 150, 150, 9);
roundedRect(ctx, 53, 53, 49, 33, 10);
roundedRect(ctx, 53, 119, 49, 16, 6);
roundedRect(ctx, 135, 53, 49, 33, 10);
roundedRect(ctx, 135, 119, 25, 49, 10);
ctx.beginPath();
ctx.arc(37, 37, 13, Math.PI / 7, -Math.PI / 7, false);
ctx.lineTo(31, 37);
ctx.fill();
for (var i = 0; i < 8; i++) {
ctx.fillRect(51 + i * 16, 35, 4, 4);
}
for (i = 0; i < 6; i++) {
ctx.fillRect(115, 51 + i * 16, 4, 4);
}
for (i = 0; i < 8; i++) {
ctx.fillRect(51 + i * 16, 99, 4, 4);
}
ctx.beginPath();
ctx.moveTo(83, 116);
ctx.lineTo(83, 102);
ctx.bezierCurveTo(83, 94, 89, 88, 97, 88);
ctx.bezierCurveTo(105, 88, 111, 94, 111, 102);
ctx.lineTo(111, 116);
ctx.lineTo(106.333, 111.333);
ctx.lineTo(101.666, 116);
ctx.lineTo(97, 111.333);
ctx.lineTo(92.333, 116);
ctx.lineTo(87.666, 111.333);
ctx.lineTo(83, 116);
ctx.fill();
ctx.fillStyle = "white";
ctx.beginPath();
ctx.moveTo(91, 96);
ctx.bezierCurveTo(88, 96, 87, 99, 87, 101);
ctx.bezierCurveTo(87, 103, 88, 106, 91, 106);
ctx.bezierCurveTo(94, 106, 95, 103, 95, 101);
ctx.bezierCurveTo(95, 99, 94, 96, 91, 96);
ctx.moveTo(103, 96);
ctx.bezierCurveTo(100, 96, 99, 99, 99, 101);
ctx.bezierCurveTo(99, 103, 100, 106, 103, 106);
ctx.bezierCurveTo(106, 106, 107, 103, 107, 101);
ctx.bezierCurveTo(107, 99, 106, 96, 103, 96);
ctx.fill();
ctx.fillStyle = "black";
ctx.beginPath();
ctx.arc(101, 102, 2, 0, Math.PI * 2, true);
ctx.fill();
ctx.beginPath();
ctx.arc(89, 102, 2, 0, Math.PI * 2, true);
ctx.fill();
}
}
// A utility function to draw a rectangle with rounded corners.
function roundedRect(ctx, x, y, width, height, radius) {
ctx.beginPath();
ctx.moveTo(x, y + radius);
ctx.lineTo(x, y + height - radius);
ctx.quadraticCurveTo(x, y + height, x + radius, y + height);
ctx.lineTo(x + width - radius, y + height);
ctx.quadraticCurveTo(x + width, y + height, x + width, y + height - radius);
ctx.lineTo(x + width, y + radius);
ctx.quadraticCurveTo(x + width, y, x + width - radius, y);
ctx.lineTo(x + radius, y);
ctx.quadraticCurveTo(x, y, x, y + radius);
ctx.stroke();
}
çµæå¦ä¸:
ç«åºé樣çåå ¶å¯¦æ²ææ³åä¸çå°é£ï¼æä»¥æåå°±ä¸åæè¿°ç´°ç¯äºï¼å ¶ä¸æ¯è¼éè¦æ³¨æçæ¯ï¼æåå¨ç¹ªåç°å¢ä¸ç¨äº fillStyle 屬æ§ä»¥åä¸åèªå®ç¾©çæç¨å½æ¸(roundedRect())ï¼å©ç¨æç¨å½æ¸ä¾å·è¡æå¸¸éè¤ç繪åå·¥ä½å¯ä»¥å¹«å¿æ¸å°ç¨å¼ç¢¼æ¸éèè¤é度ã
ç¨å¾æåææ´é²ä¸æ¥ä»ç´¹ fillStyle 屬æ§ï¼éåç¯ä¾æåæåæ¯çéé fillStyle 屬æ§ä¾æ¹è®è·¯å¾å¡«æ»¿è²çºç½è²ï¼ç¶å¾åæ¹åé è¨é»è²ï¼ä¾è®æå¡«æ»¿é¡è²ã
Path2D objectså¦ååé¢çç¯ä¾ï¼canvas ä¸å¸¸å¸¸æç«ä¸ä¸é£ä¸²ç繪åè·¯å¾ï¼çºäºç°¡åç¨å¼ç¢¼éææ¹åæè½ï¼æåå¯ä»¥å©ç¨ Path2D
ç©ä»¶ (ç®åå¨è¼å
é²çç覽å¨ä¸å·²ç¶ææä¾äº)ãPath2D è®æåå¯ä»¥å¿«ååè¨é繪åæä»¤ï¼æ¹ä¾¿å¿«ééè¤å°ç¹ªåï¼åºä¸æå°±ä¾ççå¦ä½ä½¿ç¨ Path2D :
Path2D()
Path2D ç建æ§åï¼å¯æ¥åç忏æç¡åæ¸ãå¦ä¸å Path2D ç©ä»¶ã åå 表å¼ç SVG pathï¼
new Path2D(); // ä¸å³å
¥åæ¸æåå³ä¸å空ç Path2D ç©ä»¶
new Path2D(path); // è¤è£½å³å
¥ç Path2D ç©ä»¶ï¼ç¶å¾ä»¥ä¹å»ºç« Path2D ç©ä»¶
new Path2D(d); // 以å³å
¥ç SVG è·¯å¾å»ºç« Path2D ç©ä»¶
ææå·²ç¥ç è·¯å¾ APIï¼å¦ rect, arc ççï¼é½å¯ä»¥å¨ Path2D 䏿¾å°ã
Path2D ç©ä»¶éå¯ä»¥å å ¥å ¶ä» Path2D ç©ä»¶ï¼éè®æåå¯ä»¥å¾æ¹ä¾¿ççµåå¤åç©ä»¶ä½¿ç¨ã
Path2D.addPath(path [, transform])
addPath å¢å ä¸å Path2D ç©ä»¶ï¼å ¶ä¸çéå¿ è¦åæ¸æ¯è®å½¢ç©é£ã
Path2D exampleéåä¾åç¨ Path2D ç©ä»¶å°ç©å½¢ååå½¢ç繪åè·¯å¾åèµ·ä¾ï¼ä»¥ä¾ä¹å¾ä½¿ç¨ãèé åæ°ç Path2D APIï¼æä¸äºç¹ªåæ¹æ³æ´æ¥åå³å ¥ Path2D ä½çºç¹ªåè·¯å¾ä½¿ç¨ï¼ä¾å¦ä¸æ¹æ¬ä¾æç¨å°ç stroke å fillã
function draw() {
var canvas = document.getElementById("canvas");
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
var rectangle = new Path2D();
rectangle.rect(10, 10, 50, 50);
var circle = new Path2D();
circle.moveTo(125, 35);
circle.arc(100, 35, 25, 0, 2 * Math.PI);
ctx.stroke(rectangle);
ctx.fill(circle);
}
}
使ç¨åéè·¯å¾ (SVG paths)
å¦ä¸åå¼·èæåçç¹è²æ¯å¨ SVG å Canvas 䏿åé½å¯ä»¥ä½¿ç¨ SVG pathã
ä¸é¢çè·¯å¾æç§»å°åº§æ¨é» (10, 10) (M10, 10)ï¼ç¶å¾æ°´å¹³å³ç§» 80 é» (h 80)ï¼åè³ä¸ç§» 80 é» (v 80) 水平左移 80 é» (h -80) æå¾åå°èµ·å§é» (z)ï¼è«å°Path2D
建æ§åé é¢ç繪åç¯ä¾çµæã
var p = new Path2D("M10 10 h 80 v 80 h -80 Z");
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4