å³å½¢ã®æç»ã«ã¤ãã¦ã®ç« ã§ã¯ãæ¢å®ã®ç·ã¨å¡ãã¤ã¶ãã®ã¹ã¿ã¤ã«ã®ã¿ã使ç¨ãã¾ãããããã§ã¯ãç§ãã¡ã®çµµãå°ãã§ãé åçã«ããããã«ãèªç±ã«ä½¿ãããã£ã³ãã¹ã®ãªãã·ã§ã³ã«ã¤ãã¦æ¢ã£ã¦ããã¾ããè²ãç·ã®ã¹ã¿ã¤ã«ãã°ã©ãã¼ã·ã§ã³ããã¿ã¼ã³ãå½±ã追å ããæ¹æ³ãå¦ã³ã¾ãã
ã¡ã¢: ãã£ã³ãã¹ã®ã³ã³ãã³ãã¯ã¹ã¯ãªã¼ã³ãªã¼ãã¼ã«ã¯ã¢ã¯ã»ã·ããªãã£ãããã¾ããããã£ã³ãã¹ãç´ç²ã«è£
飾çãªå ´åã¯ã role="presentation"
ã <canvas>
ã®éå§ã¿ã°ã«è¨è¼ãã¦ãã ãããããã§ãªãå ´åã¯ããã£ã³ãã¹è¦ç´ èªä½ã«ç´æ¥ aria-label
屿§ã®å¤ã¨ãã¦èª¬æããã¹ããå
¥ããããéå§ã¿ã°ã¨éãã¿ã°ã®ä¸ã«ä»£æ¿ã³ã³ãã³ããå
¥ãã¦ãã ããããã£ã³ãã¹ã®ã³ã³ãã³ã㯠DOM ã®ä¸é¨ã§ã¯ããã¾ããããä¸ã®ä»£æ¿ã³ã³ãã³ã㯠DOM ã®ä¸é¨ã§ãã
ä»ã¾ã§ã¯ãæç»ã³ã³ããã¹ãã®ã¡ã½ããã ããè¦ã¦ãã¾ããããããå³å½¢ã«è²ãã¤ãããã®ã§ããã°ã 2 ã¤ã®éè¦ãªããããã£ã使ç¨ãããã¨ãã§ãã¾ãã fillStyle
㨠strokeStyle
ã§ãã
fillStyle = color
å³å½¢ãå¡ãã¤ã¶ãéã«ä½¿ç¨ããã¹ã¿ã¤ã«ãè¨å®ãã¾ãã
strokeStyle = color
å³å½¢ã®è¼ªéã®ã¹ã¿ã¤ã«ãè¨å®ãã¾ãã
color
ã¯æååã§ã CSS ã® <color>
ãã°ã©ãã¼ã·ã§ã³ãªãã¸ã§ã¯ãããã¿ã¼ã³ãªãã¸ã§ã¯ãã表ãã¾ããã°ã©ãã¼ã·ã§ã³ãªãã¸ã§ã¯ãã¨ãã¿ã¼ã³ãªãã¸ã§ã¯ãã«ã¤ãã¦ã¯å¾ã§è¦ã¾ããæ¢å®ã§ã¯ã輪éç·ã¨å¡ãã¤ã¶ãã®è²ã¯é»ã«è¨å®ããã¦ãã¾ãï¼CSS è²ã§ã¯#000000
ï¼ã
ã¡ã¢: strokeStyle
ããã³ fillStyle
ããããã£ãè¨å®ããã¨ããã®è¨å®ããå¤ãæ¢å®ã¨ãªã£ã¦ããã以éã«æãããå³å½¢ã®ç·ãå¡ãã¤ã¶ãã¯ãã®è²ã§è¡ãªãããããã«ãªãã¾ããããããã®å³å½¢ãããããå¥ã®è²ã§æãããå ´åã¯ãå³å½¢ãæããã¨ã« fillStyle
ã strokeStyle
ããããã£ãè¨å®ããå¿
è¦ãããã¾ãã
å
¥åã§ããæå¹ãªæååã¯ã CSS ã® <color>
å¤ã§ããå¿
è¦ãããã¾ãã ä¸è¨ã®ä¾ã§ã¯åãè²ã«ã¤ãã¦èª¬æãã¦ãã¾ãã
// ãããã¯å
¨ã¦ fillStyle ã«ãªã¬ã³ã¸è²ãè¨å®ãã¾ã
ctx.fillStyle = "orange";
ctx.fillStyle = "#FFA500";
ctx.fillStyle = "rgb(255 165 0)";
ctx.fillStyle = "rgb(255 165 0 / 100%)";
fillStyle
ã®ä¾
ãã®ä¾ã§ã¯ãåã³ 2 ã¤ã® for
ã«ã¼ãã使ã£ã¦ãããããç°ãªãè²ã®ç©å½¢ãæ ¼åç¶ã«æç»ãã¦ãã¾ããåºæ¥ä¸ãã£ãç»åã¯ã¹ã¯ãªã¼ã³ã·ã§ããã®ãããªãã®ã«ãªãã¯ãã§ããããã§ã¯ããã¾ãæ´¾æãªãã¨ã¯ãã¦ãã¾ããã 2 ã¤ã®å¤æ° i
㨠j
ã使ã£ã¦ããããã®æ£æ¹å½¢ã«åºæã® RGB ã«ã©ã¼ãçæãã赤ã¨ç·ã®å¤ã ãã夿´ãã¾ããéãã£ã³ãã«ã¯åºå®å¤ã§ãããã£ã³ãã«ã夿´ãããã¨ã§ããããã種é¡ã®ãã¬ãããçæãããã¨ãã§ãã¾ããã¹ããããå¢ããã°ã Photoshop ã使ã£ã¦ããã«ã©ã¼ãã¬ããã«è¿ããã®ãå®ç¾ãããã¨ãå¯è½ã§ãã
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
for (let i = 0; i < 6; i++) {
for (let j = 0; j < 6; j++) {
ctx.fillStyle = `rgb(${Math.floor(255 - 42.5 * i)} ${Math.floor(
255 - 42.5 * j,
)} 0)`;
ctx.fillRect(j * 25, i * 25, 25, 25);
}
}
}
<canvas id="canvas" width="150" height="150"
>6Ã6 ã®æ£æ¹å½¢ã®ã°ãªããã§ã36 ã®è²ã表示ããã¦ãã¾ãã</canvas
>
çµæã¯æ¬¡ã®ããã«ãªãã¾ãã
strokeStyle
ã®ä¾
ãã®ä¾ã¯ä¸ã®ä¾ã¨ä¼¼ã¦ãã¾ããã strokeStyle
ããããã£ã使ã£ã¦ãå³å½¢ã®è¼ªéã®è²ãå¤ãã¦ãã¾ããã¾ãã arc()
ã¡ã½ããã使ã£ã¦ãåè§å½¢ã®ä»£ããã«åãæãã¦ãã¾ãã
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
for (let i = 0; i < 6; i++) {
for (let j = 0; j < 6; j++) {
ctx.strokeStyle = `rgb(0 ${Math.floor(255 - 42.5 * i)} ${Math.floor(
255 - 42.5 * j,
)})`;
ctx.beginPath();
ctx.arc(12.5 + j * 25, 12.5 + i * 25, 10, 0, 2 * Math.PI, true);
ctx.stroke();
}
}
}
<canvas id="canvas" width="150" height="150" role="presentation"></canvas>
çµæã¯æ¬¡ã®ããã«ãªãã¾ãã
éæåº¦ãã£ã³ãã¹ã«ã¯ä¸éæãªå³å½¢ãæãã ãã§ã¯ãªããåéæã®å³å½¢ãæããã¨ãã§ãã¾ããããã¯ã globalAlpha
ããããã£ãè¨å®ãããã輪éãå¡ãã¤ã¶ãã®ã¹ã¿ã¤ã«ã«åéæã®è²ãå²ãå½ã¦ããã¨ã§å®ç¾ãã¾ãã
globalAlpha = transparencyValue
ä»£å ¥ãããéæåº¦ã®å¤ããä»£å ¥å¾ã«ãã£ã³ãã¹ã«æç»ããããã¹ã¦ã®å³å½¢ã«é©ç¨ãã¾ããå¤ã¯ 0.0 ï¼å®å ¨ã«éæï¼ãã 1.0 ï¼å®å ¨ã«ä¸éæï¼ã®éã§ãªããã°ãªãã¾ãããæ¢å®ã§ã¯ 1.0 ï¼å®å ¨ã«ä¸éæï¼ãè¨å®ããã¦ãã¾ãã
globalAlpha
ããããã£ã¯ãåæ§ã®éæåº¦ã§ãã£ã³ãã¹ã«ããã¤ãã®å³å½¢ãæç»ããå ´åã«å½¹ã«ç«ã¡ã¾ããããã以å¤ã®å ´åã¯ãè²ãè¨å®ããã¨ãã«ããããã®å³å½¢ã«éæåº¦ãè¨å®ããæ¹ãä¸è¬çã«ä¾¿å©ã§ãã
strokeStyle
ããããã£ã¨ fillStyle
ããããã£ã¯ CSS ã® rgb 表ç¾ãå©ç¨ã§ãããããæ¬¡ã®ãããªè¡¨è¨ã使ç¨ãã¦éæãªè²ãå²ãå½ã¦ããã¨ãã§ãã¾ãã
// 輪éç·ã¨å¡ãã¤ã¶ãã®è²ã«éæè²ãå²ãå½ã¦ã
ctx.strokeStyle = "rgb(255 0 0 / 50%)";
ctx.fillStyle = "rgb(255 0 0 / 50%)";
rgb()
颿°ã«ã¯ãªãã·ã§ã³ã®å¼æ°ãããã¾ããæå¾ã®å¼æ°ã¯ãç¹å®ã®è²ã®ééçãè¨å®ãã¾ããæå¹ãªç¯å²ã¯ 0%
ï¼å®å
¨ã«éæï¼ãã 100%
ï¼å®å
¨ã«ä¸éæï¼ã¾ã§ã®ãã¼ã»ã³ãå¤ãã¾ã㯠0.0
ï¼0%
ã¨åãï¼ãã 1.0
ï¼100%
ã¨åãï¼ã¾ã§ã®æ°å¤ã§æå®ãã¾ãã
globalAlpha
ã®ä¾
ãã®ä¾ã§ã¯ã 4 ã¤ã®ç°ãªãè²ã®æ£æ¹å½¢ã§èæ¯ãæãã¾ãããã®ä¸ã«ãä¸é£ã®åéæã®åãæãã¾ãããã®ã¨ãã globalAlpha
ããããã£ã¯ 0.2
ã«è¨å®ããããã以éãã¹ã¦ã®å³å½¢ã«ä½¿ç¨ããã¾ãã for
ã«ã¼ãã®ããããã®ã¹ãããã§ã¯ãåå¾ã®å¤§ããªåãæç»ãã¾ããæçµçãªçµæã¯æ¾å°ç¶ã®ã°ã©ãã¼ã·ã§ã³ã«ãªãã¾ããããå¤ãã®åãéãããã¨ã§ããã§ã«æããã¦ããåã®éæåº¦ã广çã«ä¸ãã¦ãã¾ããã¹ãããæ°ãå¢ãããããå¤ãã®åãæãã¨ãç»åã®ä¸å¿ããèæ¯ãå®å
¨ã«æ¶ãã¾ãã
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
// draw background
ctx.fillStyle = "#FD0";
ctx.fillRect(0, 0, 75, 75);
ctx.fillStyle = "#6C0";
ctx.fillRect(75, 0, 75, 75);
ctx.fillStyle = "#09F";
ctx.fillRect(0, 75, 75, 75);
ctx.fillStyle = "#F30";
ctx.fillRect(75, 75, 75, 75);
ctx.fillStyle = "#FFF";
// set transparency value
ctx.globalAlpha = 0.2;
// Draw semi transparent circles
for (let i = 0; i < 7; i++) {
ctx.beginPath();
ctx.arc(75, 75, 10 + 10 * i, 0, Math.PI * 2, true);
ctx.fill();
}
}
<canvas id="canvas" width="150" height="150" role="presentation"></canvas>
ã¢ã«ãã¡ééçã®ã¤ãã rgb()
ã®ä½¿ç¨ä¾
ãã® 2 ã¤ç®ã®ä¾ã§ã¯ãä¸ã®ä¾ã¨ä¼¼ããããªãã¨ããã¦ãã¾ãããåãéãã¦æãã®ã§ã¯ãªããå°ããªé·æ¹å½¢ãä¸éæåº¦ãä¸ããªããæãã¦ãã¾ãã rgb()
ã使ãã¨ãå¡ãã¤ã¶ãã¨è¼ªéç·ã®ã¹ã¿ã¤ã«ãåå¥ã«è¨å®ã§ããã®ã§ãããå°ãå¶å¾¡ã¨æè»æ§ãå¢ãã¾ãã
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
// Draw background
ctx.fillStyle = "rgb(255 221 0)";
ctx.fillRect(0, 0, 150, 37.5);
ctx.fillStyle = "rgb(102 204 0)";
ctx.fillRect(0, 37.5, 150, 37.5);
ctx.fillStyle = "rgb(0 153 255)";
ctx.fillRect(0, 75, 150, 37.5);
ctx.fillStyle = "rgb(255 51 0)";
ctx.fillRect(0, 112.5, 150, 37.5);
// åéæã®é·æ¹å½¢ãæç»
for (let i = 0; i < 10; i++) {
ctx.fillStyle = `rgb(255 255 255 / ${(i + 1) / 10})`;
for (let j = 0; j < 4; j++) {
ctx.fillRect(5 + i * 14, 5 + j * 37.5, 14, 27.5);
}
}
}
<canvas id="canvas" width="150" height="150" role="presentation"></canvas>
ç·ã®ã¹ã¿ã¤ã«
ç·ã®ã¹ã¿ã¤ã«ä»ããå¯è½ã«ããããããã£ãããã¤ãããã¾ãã
lineWidth = value
ããããæãããç·ã®å¹ ãè¨å®ãã¾ãã
lineCap = type
ç·ã®æ«ç«¯ã®å¤è¦³ãè¨å®ãã¾ãã
lineJoin = type
ç·ã¨ç·ã交ãããè§ãã®å¤è¦³ãè¨å®ãã¾ãã
miterLimit = value
2 æ¬ã®ç·ãéè§ã«æ¥åããéã®ãã¤ã¿ã¼ãå¶éããæ¥åé¨ã®å¤ªããå¶å¾¡ãããã¨ãã§ãã¾ãã
getLineDash()
éè² ã®å¶æ°åãå«ãç¾å¨ã®ç·ããã·ã¥ã®ãã¿ã¼ã³ã®é åãè¿ãã¾ãã
setLineDash(segments)
ç¾å¨ã®ç·ããã·ã¥ãã¿ã¼ã³ãè¨å®ãã¾ãã
lineDashOffset = value
ããã·ã¥é åã®è¡é ä½ç½®ãæå®ãã¾ãã
以ä¸ã®ä¾ãã覧ããã ãã¨ãããããä½ããããã®ãªã®ããããçè§£ãã¦ããã ããã¨æãã¾ãã
lineWidth
ã®ä¾
ãã®ããããã£ã¯ãç¾å¨ã®ç·ã®å¤ªããè¨å®ãã¾ããå¤ã¯æ£ã®æ°ã§ãªããã°ãªãã¾ãããæ¢å®ã§ã¯ããã®å¤ã¯ 1.0 åä½ã«è¨å®ããã¦ãã¾ãã
ç·ã®å¹ ã¯ãä¸ãããããã¹ãä¸å¿ã¨ããã¹ããã¼ã¯ã®å¤ªãã§ããè¨ãæããã°ãæç»ãããé åã¯ãã¹ã®ä¸¡å´ã§ç·å¹ ã®ååã¾ã§åºããã¾ãããã£ã³ãã¹ã®åº§æ¨ã¯ãã¯ã»ã«ãç´æ¥åç §ããããã§ã¯ãªãã®ã§ãæ°´å¹³ã»åç´æ¹åã®ç·ãé®®æã«ãªãããã«ç¹å¥ãªæ³¨æãæãå¿ è¦ãããã¾ãã
ä¸ã®ä¾ã§ã¯ã 10 æ¬ã®ç´ç·ãç·å¹ ã大ãããã¦æãã¦ãã¾ããä¸çªå·¦ã®ç·ã®å¹ 㯠1.0 åä½ã§ããããããä¸çªå·¦ã®ç·ã¨ãã®ä»ã®å¥æ°å¹ ã®å¤ªãç·ã¯ããã¹ã®ä½ç½®ã®é¢ä¿ã§é®®æã«è¡¨ç¤ºããã¾ããã
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
for (let i = 0; i < 10; i++) {
ctx.lineWidth = 1 + i;
ctx.beginPath();
ctx.moveTo(5 + i * 14, 5);
ctx.lineTo(5 + i * 14, 140);
ctx.stroke();
}
}
<canvas id="canvas" width="150" height="150" role="presentation"></canvas>
é®®æãªç·ãå¾ãã«ã¯ããã¹ãã©ã®ããã«æãããããçè§£ããå¿ è¦ãããã¾ããä¸ã®ç»åã§ãã°ãªããã¯ãã£ã³ãã¹ã®åº§æ¨ã°ãªããã表ãã¦ãã¾ããã°ãªããç·ã¨ã°ãªããç·ã®éã®ç©å½¢ã¯ãç»é¢ä¸ã®å®éã®ãã¯ã»ã«ã§ããä¸ã®æåã®ã°ãªããç»åã§ã¯ã (2,1) ãã (5,5) ã¾ã§ã®ç©å½¢ãå¡ãã¤ã¶ããã¦ãã¾ãããã®éã®é åï¼è赤è²ï¼ã¯ãã¹ã¦ãã¯ã»ã«ã®å¢çç·ã«å½ããã®ã§ãå¡ãã¤ã¶ãããç©å½¢ã¯é®®æãªã¨ãã¸ãæã¤ãã¨ã«ãªãã¾ãã
(3,1) ãã (3,5) ã¾ã§ã®ãã¹ãç·ã®å¤ªãã 1.0
ã«ãã¦èãã¦ã¿ãã¨ã 2 çªç®ã®ç»åã®ãããªç¶æ³ã«ãªãã¾ããå®éã«å¡ãã¤ã¶ãããé åï¼æ¿ãéè²ï¼ã¯ããã¹ã®ä¸¡å´ã®ãã¯ã»ã«ã®ååã¾ã§ããå±ãã¾ããããã®è¿ä¼¼å¤ãã¬ã³ããªã³ã°ããªããã°ãªããªãã®ã§ããããã®ãã¯ã»ã«ã¯é¨åçã«ããã·ã§ã¼ãã£ã³ã°ãããããã®çµæãé åå
¨ä½ï¼æ°´è²ã¨æ¿ç´ºï¼ãå®éã®ã¹ããã¼ã¯è²ã®ååã®æ¿ãã§ããå¡ãã¤ã¶ãããªããã¨ã«ãªãã¾ããããã¯ãåã®ä¾ã®ã³ã¼ãã§ 1.0
ã®å¹
ã®è¡ã§èµ·ãããã¨ã§ãã
ããã解決ããã«ã¯ããã¹ã®ä½æãéå¸¸ã«æ£ç¢ºã«è¡ãå¿
è¦ãããã¾ãã 1.0
ã®å¹
ã®ç·ã¯ãã¹ã®ä¸¡å´ã¸ååä½ä¼¸ã³ããã¨ãç¥ã£ã¦ãã¦ããã¹ã (3.5,1) ãã (3.5,5) ã¾ã§ä½æããã¨ã 3 çªç®ã®ç»åã®ãããªç¶æ³ã«ãªãã¾ãã 1.0
ã®ç·å¹
ã¯å®å
¨ã«ãæ£ç¢ºã« 1 ãã¯ã»ã«ã®ç¸¦ç·ãåãããã¨ã«ãªãã¾ãã
ã¡ã¢: 縦ç·ã®ä¾ã§ã¯ã Y ä½ç½®ã¯ã¾ã æ´æ°ã®ã°ãªããç·ä½ç½®ãåç
§ãã¦ãããã¨ã«æ³¨æãã¦ãã ãããããããã§ãªããã°ã端ç¹ã§ååããã«ãã¼ãã¦ããªããã¯ã»ã«ãè¦ããã§ãããï¼ãã ãããã®åä½ã¯ãæ¢å®å¤ã butt
ã§ããç¾å¨ã® lineCap
ã¹ã¿ã¤ã«ã«ä¾åãã¦ãããã¨ã«ã注æãã¦ãã ããã奿°å¹
ã®ç·ã«å¯¾ãã¦åãã¯ã»ã«åº§æ¨ã§ä¸è²«ããã¹ããã¼ã¯ãè¨ç®ããã«ã¯ã lineCap
ã¹ã¿ã¤ã«ã square
ã«ãã¦ã端ç¹å¨ãã®ã¹ããã¼ã¯ã®å¤æ ãèªåçã«ãã¯ã»ã«å
¨ä½ãæ£ç¢ºã«è¦ãã¾ã§æ¡å¼µãã¾ãï¼ã
ã¾ãããã¹ã®å§ç¹ã¨çµç¹ã®ã¿ãå½±é¿ãåãããã¨ã«æ³¨æãã¦ãã ããããã¹ã closePath()
ã§éããããã¨ãå§ç¹ã¨çµç¹ããªããªãã¾ãããã®ä»£ããã«ããã¹ã®ãã¹ã¦ã®ç«¯ç¹ã¯ãç¾å¨ã® lineJoin
ã¹ã¿ã¤ã«ã®è¨å®ï¼æ¢å®å¤ã¯ miter
ï¼ã使ç¨ãã¦ãæ¥ç¶ãããåºéã®å¤å´ã®å¢çç·ããããã®äº¤ç¹ã¾ã§èªåçã«æ¡å¼µãã广ããããã¬ã³ããªã³ã°ã¹ããã¼ã¯ã¯ãæ¥ç¶ãããåºéãæ°´å¹³ã¾ãã¯åç´ã§ããå ´åã«ããããã®ç«¯ç¹ãä¸å¿ã¨ãããã¯ã»ã«å
¨ä½ãæ£ç¢ºã«è¦ãããã«ãªãã¾ãããããã®è¿½å ã©ã¤ã³ã¹ã¿ã¤ã«ã®ãã¢ã«ã¤ãã¦ã¯ã次㮠2 ã¤ã®ã»ã¯ã·ã§ã³ãåç
§ãã¦ãã ããã
å¶æ°å¹ ã®ç·ã¯ãããããã®ååãæ´æ°ã®ãã¯ã»ã«ã«ãªãã®ã§ããã¯ã»ã«ã®çãä¸ã§ã¯ãªãããã¯ã»ã«ã¨ãã¯ã»ã«ã®éï¼ã¤ã¾ã (3,1) ãã (3,5)ï¼ã«ãã¹ãè¨å®ããå¿ è¦ãããã¾ãã
æ¡å¤§ç¸®å°å¯è½ãªäºæ¬¡å ã°ã©ãã£ãã¯ãæ±ãæåã®ãã¡ã¯å°ãé¢åã§ããããã¯ã»ã«ã°ãªããã¨ãã¹ã®ä½ç½®ã«æ³¨æãããã¨ã§ãæ¡å¤§ç¶æ³ããã®ä»ã®åº§æ¨å¤æã«é¢ä¿ãªããæç»ãæ£ãã表示ãããã¨ãã§ãã¾ããæ£ããä½ç½®ã«æãããå¹ 1.0 ã®ç¸¦ç·ã¯ã 2 åã«æ¡å¤§ãã㨠2 ãã¯ã»ã«ã®é®®æãªç·ã¨ãªããæ£ããä½ç½®ã«è¡¨ç¤ºããã¾ãã
lineCap
ã®ä¾
lineCap
ããããã£ã¯ããã¹ã¦ã®ç·ã®ç«¯ç¹ãã©ã®ããã«æãããããæ±ºå®ãã¾ãããã®ããããã£ã«ã¯3ã¤ã®å¤ããããããã㯠butt
, round
, quare
ã§ããæ¢å®ã§ã¯ããã®ããããã£ã¯ butt
ã«è¨å®ããã¦ãã¾ãã
butt
ç·ã®ä¸¡ç«¯ã¯ãæ«å°¾ã®ç¹ã§åè§ãåãè½ã¨ããã¾ãã
round
ç·ã®ä¸¡ç«¯ã¯ä¸¸ãããã¾ãã
square
ç·ã®ä¸¡ç«¯ã¯ãç·ã®å¤ªãã¨åãå¹ ã¨ååã®é«ãã®ããã¯ã¹ã追å ãã¦åè§ãããã¾ãã
ãã®ä¾ã§ã¯ã 3 æ¬ã®ç·ãæãã¾ããããããã®ç·ã¯ lineCap
ããããã£ã®å¤ãç°ãªã£ã¦ãã¾ããã¾ãã 3 ã¤ã®æ£ç¢ºãªéããè¦ãããã«ã 2 ã¤ã®ã¬ã¤ãã追å ãã¾ãããããããã®ç·ã¯ããããã®ã¬ã¤ãã®ä¸ã§æ£ç¢ºã«å§ã¾ããçµããã¾ãã
å·¦å´ã®ç·ã¯ãæ¢å®ã® butt
ãªãã·ã§ã³ã使ç¨ãã¦ãã¾ããã¬ã¤ãã¨å®å
¨ã«åãé«ãã«æããã¦ããã®ããããã¨æãã¾ãã 2 çªç®ã®ç·ã¯ round
ãªãã·ã§ã³ã使ãããã«è¨å®ããã¦ãã¾ããããã¯ç·ã®å¹
ã®ååã®åå¾ãæã¤ååã端ã«è¿½å ãã¾ããå³ã®ç·ã¯ square
ãªãã·ã§ã³ã使ç¨ãã¦ãã¾ããããã¯ç·ã®å¤ªãã¨åãå¹
ã¨ååã®é«ãã®ããã¯ã¹ã追å ãã¾ãã
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
// ã¬ã¤ããæç»
ctx.strokeStyle = "#09f";
ctx.beginPath();
ctx.moveTo(10, 10);
ctx.lineTo(140, 10);
ctx.moveTo(10, 140);
ctx.lineTo(140, 140);
ctx.stroke();
// ç·ãæç»
ctx.strokeStyle = "black";
["butt", "round", "square"].forEach((lineCap, i) => {
ctx.lineWidth = 15;
ctx.lineCap = lineCap;
ctx.beginPath();
ctx.moveTo(25 + i * 50, 10);
ctx.lineTo(25 + i * 50, 140);
ctx.stroke();
});
}
<canvas id="canvas" width="150" height="150" role="presentation"></canvas>
lineJoin
ã®ä¾
lineJoin
ããããã£ã¯ãå½¢ç¶å
ã®é·ããã¼ãã§ãªã 2 ã¤ã®æ¥ç¶ãããåºéï¼ç´ç·ãåå¼§ãæ²ç·ï¼ãã©ã®ããã«çµåããããæ±ºå®ãã¾ãï¼é·ããã¼ãã§ãæå®ãã端ç¹ã¨å¶å¾¡ç¹ãæ£ç¢ºã«åãä½ç½®ã«ããåºéã¯ã¹ãããããã¾ãï¼ã
ãã®ããããã£ã«ã¯ã 3 ã¤ã®å¤ãããã¾ãããã®ããããã£ã«ã¯ã round
, bevel
, miter
ã® 3 ã¤ã®å¤ãããã¾ããæ¢å®ã§ã¯ããã®ããããã£ã¯ miter
ã«è¨å®ããã¦ãã¾ãããªããlineJoin
ã®è¨å®ã¯ãæ¥ç¶ããã 2 ã¤ã®åºéã®æ¹åãåãã§ããå ´åã«ã¯ãæ¥åé åã追å ãããªããããä½ã®å¹æãããã¾ããã
round
æ¥ç¶ãããåºéã®å ±éã®ç«¯ç¹ãä¸å¿ã¨ããåç¤ã®è¿½å ã»ã¯ã¿ã¼ãåãããã¨ã«ãã£ã¦ãå½¢ç¶ã®è§ã丸ããã¾ãããã®ä¸¸ããããè§ã®åå¾ã¯ãç·å¹ ã®ååã«çãããªãã¾ãã
bevel
æ¥ç¶ãããåºéã®å ±éã®ç«¯ç¹ã¨ãååºéã«ããåå¥ã®å¤å´ã®é·æ¹å½¢ã®è§ã¨ã®éã®ä¸è§å½¢ã®é åã追å ã§åãã¾ãã
miter
æ¥ç¶ãããåºéã¯ãå¤å´ã®ã¨ãã¸ãå»¶é·ã㦠1 ç¹ã§æ¥ç¶ããã追å ã®ãã¼ã³ã¸å½¢ç¶ã®é åãåãã广ãããã¾ãããã®è¨å®ã¯ã以ä¸ã«èª¬æãã miterLimit
ããããã£ã«ãã£ã¦å½±é¿ããã¾ãã
以ä¸ã®ä¾ã§ã¯ãããã3ã¤ã® lineJoin
ããããã£è¨å®ããããã宿¼ããªããã 3 ã¤ã®ç°ãªããã¹ãæç»ãã¦ãã¾ãã
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
ctx.lineWidth = 10;
["round", "bevel", "miter"].forEach((lineJoin, i) => {
ctx.lineJoin = lineJoin;
ctx.beginPath();
ctx.moveTo(-5, 5 + i * 40);
ctx.lineTo(35, 45 + i * 40);
ctx.lineTo(75, 5 + i * 40);
ctx.lineTo(115, 45 + i * 40);
ctx.lineTo(155, 5 + i * 40);
ctx.stroke();
});
}
<canvas id="canvas" width="150" height="150" role="presentation"></canvas>
miterLimit
ããããã£ã®ãã¢
åã®ä¾ã§è¦ãããã«ã miter
ãªãã·ã§ã³ã使ã£ã¦ 2 æ¬ã®ç·ãã¤ãªãã¨ã2 æ¬ã®ç·ã®å¤å´ã®ç«¯ã¯ãããããåºä¼ãç¹ã¾ã§å»¶é·ããã¾ããäºãã«å¤§ããªè§åº¦ãæã¤ç·ã®å ´åããã®ç¹ã¯å
å´ã®æ¥ç¶ç¹ããããé ããªãã¨ããã«ããã¾ããããããåã©ã¤ã³éã®è§åº¦ãå°ãããªãã«ã¤ãã¦ããããã®ãã¤ã³ãéã®è·é¢ï¼ãã¤ã¿ã¼é·ï¼ã¯ææ°é¢æ°çã«å¢å ãã¾ãã
miterLimit
ããããã£ã¯ãå
å´ã®æ¥ç¶ç¹ããå¤å´ã®æ¥ç¶ç¹ãã©ãã ãé ãã«é
ç½®ã§ããããæ±ºå®ãã¾ããããã 2 æ¬ã®ç·ããã®å¤ãè¶
ããå ´åã代ããã«ããã«ã¸ã§ã¤ã³ããæããã¾ããæå¤§ãã¤ã¿ã¼é·ã¯ãç¾å¨ã®åº§æ¨ç³»ã§æ¸¬å®ãããç·ã®å¹
ã¨ããã® miterLimit
ããããã£ã®å¤ï¼æ¢å®å¤ã¯ HTML ã® <canvas>
ã® 10.0ï¼ã®ç©ã§ãããã¨ã«æ³¨æãã¦ãã ããããããã£ã¦ miterLimit
ã¯ç¾å¨ã®è¡¨ç¤ºã¹ã±ã¼ã«ããã¹ã®ã¢ãã£ã³å¤æã¨ã¯ç¬ç«ãã¦è¨å®ã§ãã¾ããããã¯ãç·ã®ç«¯ã®å¹æçãªã¬ã³ããªã³ã°ã®å½¢ç¶ã«ã®ã¿å½±é¿ãããã®ã§ãã
ããæ£ç¢ºã«ã¯ããã¤ã¿ã¼å¶éã¨ã¯ãç·å¹ ã®ååã«å¯¾ããå»¶é·é·ãï¼HTML ãã£ã³ãã¹ã§ã¯ãç·ã®æ¥ç¶ç«¯ã®å¤å´ã®è§ã¨ããã¹ã§æå®ããæ¥ç¶ã»ã°ã¡ã³ãã®å ±éã®ç«¯ç¹ã®éã§æ¸¬ãã¾ãï¼ã®æå¤§è¨±å®¹æ¯çã®ãã¨ã§ããããã¯åæ§ã«ãç·å¹ å ¨ä½ã«å¯¾ãããè¾ºã®æ¥åé¨ã®å å´ã¨å¤å´ã®ç¹éã®è·é¢ã®æå¤§è¨±å®¹æ¯çã¨å®ç¾©ãããã¨ãã§ãã¾ããããã¯ãæ¥ç¶ã»ã°ã¡ã³ãã®æå°å è§ã®ååã®æ£æ¥ã«çããããã以ä¸ã§ã¯ãã¤ã¿ã¼çµåã¯æç»ããããããã«çµåã®ã¿ãæç»ããã¾ãã
miterLimit
= max miterLength
/ lineWidth
= 1 / sin ( min θ / 2 )ããã§ã¯ã miterLimit
ãåçã«è¨å®ããããããã£ã³ãã¹ä¸ã®å³å½¢ã«ã©ã®ããã«å½±é¿ããããè¦ãããã®å°ããªãã¢ãç´¹ä»ãã¾ããéãç·ã¯ãã¸ã°ã¶ã°æ¨¡æ§ã®åç·ã®å§ç¹ã¨çµç¹ã示ãã¦ãã¾ãã
ãã®ãã¢ã§ã¯ miterLimit
ã®å¤ã 4.2 以ä¸ã«æå®ããã¨ãã©ã®ã³ã¼ãã¼ããã¤ã¿ã¼å»¶é·ã§çµåããããéãç·ã®è¿ãã«å°ããªé¢åããè¡ããã¾ããmiterLimit
ã 10 以ä¸ã«ããã¨ããã®ãã¢ã§ã¯ã»ã¨ãã©ã®ã³ã¼ãã¼ãéãç·ããé ãé¢ãããã¤ã¿ã¼ã§æ¥ç¶ããããã¨ã«ãªããå·¦ããå³ã¸ã¨è§åº¦ã大ãããªãã«ã¤ãã¦é«ããä½ããªã£ã¦ããã¾ããä¸éã®å¤ã§ã¯ãå·¦å´ã®è§ã¯éç·ä»è¿ã®é¢åãã§ã®ã¿æ¥åããå³å´ã®è§ã¯ãã¤ã¿ã¼æ¡å¼µï¼é«ããæ¸å°ï¼ã§æ¥åãã¾ãã
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
// ãã£ã³ãã¹ãæ¶å»
ctx.clearRect(0, 0, 150, 150);
// ã¬ã¤ããæç»
ctx.strokeStyle = "#09f";
ctx.lineWidth = 2;
ctx.strokeRect(-5, 50, 160, 50);
// ç·ã®ã¹ã¿ã¤ã«ãè¨å®
ctx.strokeStyle = "#000";
ctx.lineWidth = 10;
// å
¥åããã§ãã¯
if (document.getElementById("miterLimit").value.match(/\d+(\.\d+)?/)) {
ctx.miterLimit = parseFloat(document.getElementById("miterLimit").value);
} else {
alert("Value must be a positive number");
}
// ç·ãæç»
ctx.beginPath();
ctx.moveTo(0, 100);
for (let i = 0; i < 24; i++) {
const dy = i % 2 === 0 ? 25 : -25;
ctx.lineTo(Math.pow(i, 1.5) * 2, 75 + dy);
}
ctx.stroke();
return false;
}
<table>
<tr>
<td>
<canvas id="canvas" width="150" height="150" role="presentation"></canvas>
</td>
<td>
<code>miterLimit</code> ã夿´ããã«ã¯ãä¸ã«æ°ããå¤ãå
¥åããåæç»ãã¿ã³ãã¯ãªãã¯ãã¦ãã ããã<br /><br />
<form onsubmit="return draw();">
<label for="miterLimit">ãã¤ã¿ã¼å¶é</label>
<input type="number" size="3" id="miterLimit" />
<input type="submit" value="Redraw" />
</form>
</td>
</tr>
</table>
document.getElementById("miterLimit").value = document
.getElementById("canvas")
.getContext("2d").miterLimit;
draw();
ç·ããã·ã¥ã®ä½¿ç¨
setLineDash
ã¡ã½ãã㨠lineDashOffset
ããããã£ã¯ç´ç·ã®ããã·ã¥ãã¿ã¼ã³ãæå®ãã¾ããsetLineDash
ã¡ã½ããã¯ãç·ã¨ééã交äºã«æãè·é¢ãæå®ããæ°å¤ã®ãªã¹ããåãåããlineDashOffset
ããããã£ã¯ãã¿ã¼ã³ãéå§ãããªãã»ãããè¨å®ãã¾ãã
ãã®ä¾ã§ã¯ãè»ã®è¡é²ã®ãããªå¹æã使ãã¦ãã¾ããããã¯ãã³ã³ãã¥ã¼ã¿ã¼ã°ã©ãã£ãã¯ã¹ããã°ã©ã ã®é¸æãã¼ã«ã§ããè¦ãããã¢ãã¡ã¼ã·ã§ã³æè¡ã§ããå¢çç·ãã¢ãã¡ã¼ã·ã§ã³åãããã¨ã§ãã¦ã¼ã¶ã¼ãç»åã®èæ¯ã¨é¸æç¯å²ã®å¢çç·ãåºå¥ããã®ã«å½¹ç«ã¡ã¾ãããã®ãã¥ã¼ããªã¢ã«ã®å¾åã§ã¯ããã®æ¹æ³ã¨ãã®ä»ã®åºæ¬çãªã¢ãã¡ã¼ã·ã§ã³ãè¡ãæ¹æ³ãå¦ç¿ãããã¨ãã§ãã¾ãã
<canvas id="canvas" width="111" height="111" role="presentation"></canvas>
const ctx = document.getElementById("canvas").getContext("2d");
let offset = 0;
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.setLineDash([4, 2]);
ctx.lineDashOffset = -offset;
ctx.strokeRect(10, 10, 100, 100);
}
function march() {
offset++;
if (offset > 5) {
offset = 0;
}
draw();
setTimeout(march, 20);
}
march();
ã°ã©ãã¼ã·ã§ã³
éå¸¸ã®æç»ããã°ã©ã ã¨åæ§ã«ãç·å½¢ãæ¾å°ãæå½¢ã°ã©ãã¼ã·ã§ã³ãç¨ãã¦å³å½¢ãå¡ãã¤ã¶ãããæç»ããããããã¨ãã§ãã¾ãã以ä¸ã®ã¡ã½ããã®ããããã使ç¨ã㦠CanvasGradient
ãªãã¸ã§ã¯ãã使ãã¾ããããã¦ããã®ãªãã¸ã§ã¯ãã fillStyle
ã¾ã㯠strokeStyle
ããããã£ã«ä»£å
¥ãããã¨ãã§ãã¾ãã
createLinearGradient(x1, y1, x2, y2)
ç·å½¢ã°ã©ãã¼ã·ã§ã³ãªãã¸ã§ã¯ããã (x1
, y1
) ã®ç¹ããå§ã¾ã (x2
, y2
) ã®ç¹ããçµããä½ç½®ã«çæãã¾ãã
createRadialGradient(x1, y1, r1, x2, y2, r2)
æ¾å°ã°ã©ãã¼ã·ã§ã³ãçæãã¾ãã弿°ã¯ 2 ã¤ã®åã表ãã¾ããä¸ã¤ã¯ (x1
, y1
) ãä¸å¿ã§ r1
ãåå¾ãããä¸ã¤ã¯ (x2
, y2
) ãä¸å¿ã§ r2
ãåå¾ã§ãã
createConicGradient(angle, x, y)
æå½¢ã°ã©ãã¼ã·ã§ã³ãªãã¸ã§ã¯ãããã©ã¸ã¢ã³ã®éå§è§ angle
ãä½ç½®ã (x
, y
) ã§çæãã¾ãã
ä¾ã示ãã¾ãã
const lineargradient = ctx.createLinearGradient(0, 0, 150, 150);
const radialgradient = ctx.createRadialGradient(75, 75, 0, 75, 75, 100);
CanvasGradient
ãªãã¸ã§ã¯ãã使ãããã addColorStop()
ã¡ã½ããã使ã£ã¦è²ãå²ãå½ã¦ããã¨ãã§ãã¾ãã
gradient.addColorStop(position, color)
gradient
ãªãã¸ã§ã¯ãã«æ°ããè²çµç±ç¹ã使ãã¾ããã¾ãã color
弿°ã¯ CSS ã® <color>
ã表ãæååã§ããå¿
è¦ããããã°ã©ãã¼ã·ã§ã³ããã®ãªãã»ããã§å°éãã¹ãè²ã表ãã¾ãã
ã°ã©ãã¼ã·ã§ã³ã«ã¯ãå¿ è¦ãªã ãè²çµç±ç¹ã追å ãããã¨ãã§ãã¾ãã以ä¸ã¯ãç½ããé»ã¸é常ã«ã·ã³ãã«ãªç·å½¢ã°ã©ãã¼ã·ã§ã³ã§ãã
const lineargradient = ctx.createLinearGradient(0, 0, 150, 150);
lineargradient.addColorStop(0, "white");
lineargradient.addColorStop(1, "black");
createLinearGradient
ã®ä¾
ãã®ä¾ã§ã¯ã 2 ã¤ã®ç°ãªãã°ã©ãã¼ã·ã§ã³ã使ãã¾ããããã§ãããããã«ã strokeStyle
㨠fillStyle
ã®ä¸¡ããããã£ã¯ canvasGradient
ãªãã¸ã§ã¯ããæå¹ãªå
¥åã¨ãã¦åãå
¥ãããã¨ãã§ãã¾ãã
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
// ã°ã©ãã¼ã·ã§ã³ãçæ
const lingrad = ctx.createLinearGradient(0, 0, 0, 150);
lingrad.addColorStop(0, "#00ABEB");
lingrad.addColorStop(0.5, "#fff");
lingrad.addColorStop(0.5, "#26C000");
lingrad.addColorStop(1, "#fff");
const lingrad2 = ctx.createLinearGradient(0, 50, 0, 95);
lingrad2.addColorStop(0.5, "#000");
lingrad2.addColorStop(1, "rgb(0 0 0 / 0%)");
// ã°ã©ãã¼ã·ã§ã³ã«å¡ãã¤ã¶ãã¨è¼ªéã®ã¹ã¿ã¤ã«ãå²ãå½ã¦ã
ctx.fillStyle = lingrad;
ctx.strokeStyle = lingrad2;
// å³å½¢ãæç»
ctx.fillRect(10, 10, 130, 130);
ctx.strokeRect(50, 50, 50, 50);
}
<canvas id="canvas" width="150" height="150" role="presentation"></canvas>
1 ã¤ç®ã¯ãèæ¯ã®ã°ã©ãã¼ã·ã§ã³ã§ããã覧ã®ããã«ãåãä½ç½®ã« 2 ã¤ã®è²ãå²ãå½ã¦ã¦ãã¾ããããã¯ãé常ã«ã·ã£ã¼ããªè²ã®é·ç§»ãè¡ãããã§ããã®å ´åã¯ç½ããç·ã¸ã®é·ç§»ã§ããé常ã¯ãè²çµç±ç¹ãã©ã®ãããªé çªã§å®ç¾©ãã¦ãåé¡ããã¾ãããããã®ç¹æ®ãªã±ã¼ã¹ã§ã¯ãããã大ããªæå³ãæã¡ã¾ãã表示ããããé çªã«å²ãå½ã¦ã¦ããã°ãåé¡ã«ã¯ãªãã¾ããã
2 ã¤ç®ã®ã°ã©ãã¼ã·ã§ã³ã§ã¯ãéå§è²ï¼ä½ç½® 0.0ï¼ãå²ãå½ã¦ã¾ããã§ããããªããªããæ¬¡ã®è²çµç±ç¹ã®è²ãèªåçã«ä»®å®ãããããå³å¯ã«ã¯å¿ è¦ãªãããã§ãããããã£ã¦ãä½ç½® 0.5 ã«é»ãå²ãå½ã¦ãã¨ãã°ã©ãã¼ã·ã§ã³ã®éå§ãããã®åæ¢ä½ç½®ã¾ã§ãèªåçã«é»ã«ãªãã¾ãã
createRadialGradient
ã®ä¾
ãã®ä¾ã§ã¯ã 4 ã¤ã®ç°ãªãæ¾å°ç¶ã°ã©ãã¼ã·ã§ã³ãå®ç¾©ãã¾ããã°ã©ãã¼ã·ã§ã³ã®éå§ç¹ã¨çµäºç¹ãå¶å¾¡ã§ããã®ã§ã Photoshop ãªã©ã§è¦ããããå¤å ¸çãªãæ¾å°ã°ã©ãã¼ã·ã§ã³ï¼ã¤ã¾ããã°ã©ãã¼ã·ã§ã³ãåå½¢ã«åºãã 1 ã¤ã®ä¸å¿ç¹ãæã¤ã°ã©ãã¼ã·ã§ã³ï¼ãããè¤éãªå¹æãå¾ããã¨ãã§ãã¾ãã
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
// ã°ã©ãã¼ã·ã§ã³ã使
const radgrad = ctx.createRadialGradient(45, 45, 10, 52, 50, 30);
radgrad.addColorStop(0, "#A7D30C");
radgrad.addColorStop(0.9, "#019F62");
radgrad.addColorStop(1, "rgb(1 159 98 / 0%)");
const radgrad2 = ctx.createRadialGradient(105, 105, 20, 112, 120, 50);
radgrad2.addColorStop(0, "#FF5F98");
radgrad2.addColorStop(0.75, "#FF0188");
radgrad2.addColorStop(1, "rgb(255 1 136 / 0%)");
const radgrad3 = ctx.createRadialGradient(95, 15, 15, 102, 20, 40);
radgrad3.addColorStop(0, "#00C9FF");
radgrad3.addColorStop(0.8, "#00B5E2");
radgrad3.addColorStop(1, "rgb(0 201 255 / 0%)");
const radgrad4 = ctx.createRadialGradient(0, 150, 50, 0, 140, 90);
radgrad4.addColorStop(0, "#F4F201");
radgrad4.addColorStop(0.8, "#E4C700");
radgrad4.addColorStop(1, "rgb(228 199 0 / 0%)");
// å³å½¢ãæç»
ctx.fillStyle = radgrad4;
ctx.fillRect(0, 0, 150, 150);
ctx.fillStyle = radgrad3;
ctx.fillRect(0, 0, 150, 150);
ctx.fillStyle = radgrad2;
ctx.fillRect(0, 0, 150, 150);
ctx.fillStyle = radgrad;
ctx.fillRect(0, 0, 150, 150);
}
<canvas id="canvas" width="150" height="150" role="presentation"></canvas>
ãã®å ´åãå§ç¹ã¨çµç¹ãå°ããããã¦ãçç¶ã®ä¸æ¬¡å 广ãåºãã¦ãã¾ããå åã¨å¤åãéãªããªãããã«ããã¨ãäºæ¸¬ãã«ãã䏿è°ãªå¹æãå¾ããã¾ãã
4 ã¤ã®ã°ã©ãã¼ã·ã§ã³ã®æå¾ã®è²çµç±ç¹ã¯ãå®å
¨ã«éæãªè²ã使ã£ã¦ãã¾ãããã®è²ããåã®è²ã¸ã®ç§»è¡ãç¾ãããããå ´åã¯ã両æ¹ã®è²ãåãã«ããå¿
è¦ãããã¾ãããã®ã³ã¼ãã§ã¯ã 2 ã¤ã®ç°ãªã CSS ã«ã©ã¼ã¡ã½ããããã¢ã³ã¹ãã¬ã¼ã·ã§ã³ã¨ãã¦ä½¿ç¨ãã¦ããã®ã§ãããã¯ãã¾ãæããã§ã¯ããã¾ããããæåã®ã°ã©ãã¼ã·ã§ã³ã§ã¯ #019F62 = rgb(1 159 98 / 100%)
ã§ãã
createConicGradient
ä¾
ãã®ä¾ã§ã¯ã 2 ã¤ã®ç°ãªãæå½¢ã°ã©ãã¼ã·ã§ã³ãå®ç¾©ãã¾ããæå½¢ã°ã©ãã¼ã·ã§ã³ã¯æ¾å°ã°ã©ãã¼ã·ã§ã³ã¨ã¯ç°ãªããåãæãã®ã§ã¯ãªããç¹ã®å¨ããä¸å¨ãã¾ãã
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
// ã°ã©ãã¼ã·ã§ã³ã®ä½æ
const conicGrad1 = ctx.createConicGradient(2, 62, 75);
conicGrad1.addColorStop(0, "#A7D30C");
conicGrad1.addColorStop(1, "#fff");
const conicGrad2 = ctx.createConicGradient(0, 187, 75);
// å¤ã« Math.PI/180 ãæãã¦åº¦æ°ãã©ã¸ã¢ã³ã«å¤æãã
conicGrad2.addColorStop(0, "black");
conicGrad2.addColorStop(0.25, "black");
conicGrad2.addColorStop(0.25, "white");
conicGrad2.addColorStop(0.5, "white");
conicGrad2.addColorStop(0.5, "black");
conicGrad2.addColorStop(0.75, "black");
conicGrad2.addColorStop(0.75, "white");
conicGrad2.addColorStop(1, "white");
// å³å½¢ãæç»
ctx.fillStyle = conicGrad1;
ctx.fillRect(12, 25, 100, 100);
ctx.fillStyle = conicGrad2;
ctx.fillRect(137, 25, 100, 100);
}
<canvas id="canvas" width="250" height="150" role="presentation"
>æå½¢ã°ã©ãã¼ã·ã§ã³</canvas
>
æåã®ã°ã©ãã¼ã·ã§ã³ã¯ãæåã®ç©å½¢ã®ä¸å¤®ã«é ç½®ãããéå§æã«ç·ã®è²çµç±ç¹ãç§»åããçµäºæã«ç½ã®è²çµç±ç¹ãç§»åãã¾ããè§åº¦ã¯ 2 ã©ã¸ã¢ã³ããå§ã¾ããå§ã¾ãã¨çµããã®ç·ãåæ±ãæãã¦ãããããé¡èã«ç¾ãã¦ãã¾ãã
2 ã¤ç®ã®ã°ã©ãã¼ã·ã§ã³ãã 2 ã¤ç®ã®ç©å½¢ã®ä¸å¿ã«é ç½®ããã¦ãã¾ãããã¡ãã¯è¤æ°ã®è²çµç±ç¹ããããå転㮠1/4 ãã¨ã«é»ããç½ã«äº¤äºã«å¤åãã¾ããããã«ããã叿¾æ¨¡æ§ã®ãããªå¹æãå¾ããã¾ãã
ãã¿ã¼ã³åãã¼ã¸ã®ä¾ã§ã¯ãä¸é£ã®ã«ã¼ãã使ã£ã¦ç»åã®ãã¿ã¼ã³ã使ãã¾ããããããããã£ã¨ç°¡åãªæ¹æ³ãããã¾ãã createPattern()
ã¡ã½ããã§ãã
createPattern(image, type)
æ°ãããã£ã³ãã¹ãã¿ã¼ã³ãªãã¸ã§ã¯ãã使ããè¿ãã¾ããimage
ã¯ç»åã®ã½ã¼ã¹ï¼ã¤ã¾ããHTMLImageElement
ãSVGImageElement
ãHTMLCanvasElement
ãOffscreenCanvas
ãHTMLVideoElement
ãVideoFrame
ãImageBitmap
ã®ããããï¼ãtype
ã¯ãç»åã®å©ç¨æ¹æ³ã示ãæååã§ãã
type ã¯ããã¿ã¼ã³ã使ããããã®ç»åã®ä½¿ç¨æ¹æ³ãæå®ãã以ä¸ã®æååå¤ã®ããããã§ãªããã°ãªãã¾ããã
repeat
åç´ã»æ°´å¹³æ¹åã«ç»åã並ã¹ã¾ãã
repeat-x
ç»åãæ°´å¹³æ¹åã«ä¸¦ã¹ã¾ãããåç´æ¹åã«ã¯ä¸¦ã¹ã¾ããã
repeat-y
ç»åãåç´æ¹åã«ä¸¦ã¹ã¾ãããæ°´å¹³æ¹åã«ã¯ä¸¦ã¹ã¾ããã
no-repeat
ç»åãã¿ã¤ã«é ç½®ãã¾ãããä¸åº¦ã ã使ç¨ããã¾ãã
ãã®ã¡ã½ããã使ã£ã¦ CanvasPattern
ãªãã¸ã§ã¯ãã使ãã¾ããããã¯ä¸ã§è¦ãã°ã©ãã¼ã·ã§ã³ã®ã¡ã½ããã¨é常ã«ããä¼¼ã¦ãã¾ãããã¿ã¼ã³ã使ããããããã fillStyle
ã¾ã㯠strokeStyle
ããããã£ã«ä»£å
¥ãã¾ããä¾ãã°æ¬¡ã®ããã«ãã¾ãã
const img = new Image();
img.src = "someimage.png";
const ptrn = ctx.createPattern(img, "repeat");
ã¡ã¢: drawImage()
ã¡ã½ããã¨åæ§ã«ããã®ã¡ã½ãããå¼ã³åºãåã«ä½¿ç¨ããç»åãèªã¿è¾¼ã¾ãã¦ãããã¨ã確èªããå¿
è¦ãããã¾ããããããªãã¨ããã¿ã¼ã³ãæ£ããæç»ãããªãå¯è½æ§ãããã¾ãã
createPattern
ã®ä¾
ãã®æå¾ã®ä¾ã§ã¯ã fillStyle
ããããã£ã«å²ãå½ã¦ããã¿ã¼ã³ã使ãã¾ããå¯ä¸ã®æ³¨ç®ãã¹ãç¹ã¯ãç»åã® onload
ãã³ãã©ã¼ã使ç¨ãã¦ãããã¨ã§ããããã¯ããã¿ã¼ã³ã«å²ãå½ã¦ãåã«ç»åãèªã¿è¾¼ã¾ã¦ããããã¨ãä¿è¨¼ããããã§ãã
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
// æ°ããç»åãªãã¸ã§ã¯ããçæãã¦ããã¿ã¼ã³ã¨ãã¦ä½¿ç¨ãã
const img = new Image();
img.src = "canvas_create_pattern.png";
img.onload = () => {
// ãã¿ã¼ã³ã使
const ptrn = ctx.createPattern(img, "repeat");
ctx.fillStyle = ptrn;
ctx.fillRect(0, 0, 150, 150);
};
}
<canvas id="canvas" width="150" height="150" role="presentation"></canvas>
å½±
å½±ã使ãã«ã¯ãã¡ããã© 4 ã¤ã®ããããã£ãå¿ è¦ã§ãã
shadowOffsetX = float
å½±ããªãã¸ã§ã¯ããã伸ã³ãã¹ãæ°´å¹³è·é¢ã示ãã¾ãããã®å¤ã¯ã夿è¡åã®å½±é¿ãåãã¾ãããæ¢å®å¤ã¯ 0 ã§ãã
shadowOffsetY = float
å½±ããªãã¸ã§ã¯ããã伸ã³ãã¹ãåç´è·é¢ã示ãã¾ãããã®å¤ã¯ã夿è¡åã®å½±é¿ãåãã¾ãããæ¢å®å¤ã¯ 0 ã§ãã
shadowBlur = float
ã¼ãã广ã®å¤§ããã示ãã¾ãããã®å¤ã¯ãã¯ã»ã«æ°ã«ã¯å¯¾å¿ãããç¾å¨ã®å¤æè¡åã®å½±é¿ãåãã¾ãããæ¢å®å¤ã¯ 0 ã§ãã
shadowColor = color
å½±ã®å¹æã®è²ã示ã CSS æ¨æºã®è²ã®å¤ã§ããã¯ãæ¢å®ã§ã¯å®å ¨ééã®é»ã§ãã
ãããã㣠shadowOffsetX
㨠shadowOffsetY
ã¯ãå½±ããªãã¸ã§ã¯ããã X 㨠Y æ¹åã«ã©ãã ã伸ã³ããã示ãã¾ãããããã®å¤ã¯ãç¾å¨ã®åº§æ¨å¤æè¡åã«ã¯å½±é¿ããã¾ãããå½±ãä¸ã¾ãã¯å·¦ã«ä¼¸ã°ãã«ã¯è² ã®å¤ã使ç¨ããå½±ãä¸ã¾ãã¯å³ã«ä¼¸ã°ãã«ã¯æ£ã®å¤ã使ç¨ãã¦ãã ãããæ¢å®å¤ã¯ã©ã¡ãã 0 ã§ãã
shadowBlur
ããããã£ã¯ã¼ãã广ã®å¤§ããã示ãã¾ãããã®å¤ã¯ãã¯ã»ã«æ°ã«ã¯å¯¾å¿ãããç¾å¨ã®å¤æè¡åã®å½±é¿ãåãã¾ãããæ¢å®å¤ã¯ 0 ã§ãã
shadowColor
ããããã£ã¯å½±ã®å¹æã®è²ã示ã CSS æ¨æºã®è²ã®å¤ã§ããã¯ãæ¢å®ã§ã¯å®å
¨ééã®é»ã§ãã
ã¡ã¢: 影㯠source-over
åææä½ã§ã®ã¿æç»ããã¾ãã
ãã®ä¾ã§ã¯ãæååãå½±ä»ãã§æç»ãã¦ãã¾ãã
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
ctx.shadowOffsetX = 2;
ctx.shadowOffsetY = 2;
ctx.shadowBlur = 2;
ctx.shadowColor = "rgb(0 0 0 / 50%)";
ctx.font = "20px Times New Roman";
ctx.fillStyle = "Black";
ctx.fillText("Sample String", 5, 30);
}
<canvas id="canvas" width="150" height="80" role="presentation"></canvas>
font
ããããã£ã¨ fillText
ã¡ã½ããã«ã¤ãã¦ã¯ã次ã®ç« ã® ããã¹ãã®æç»ã§è¦ã¦ãããã¨ã«ãã¾ãããã
fill
ï¼ã¾ã㯠clip
㨠isPointInPath
ï¼ã使ãå ´åããªãã·ã§ã³ã¨ãã¦ãããç¹ããã¹ã®å
å´ãå¤å´ãããããã£ã¦ãããåãããããã©ããã夿ããå
å¡«è¦åã®ã¢ã«ã´ãªãºã ãæå®ãããã¨ãåºæ¥ã¾ããããã¯ããã¹ãããèªèº«ã¨äº¤å·®ãã¦ããããå
¥ãåã«ãªã£ã¦ãããããå ´åã«ä¾¿å©ã§ãã
2 ã¤ã®å¤ãå¯è½ã§ãã
nonzero
éã¼ãã¯ã¤ã³ãã£ã³ã°ã«ã¼ã«ã§ãããã¡ããæ¢å®ã®ã«ã¼ã«ã§ãã
evenodd
å¶å¥ã¯ã¤ã³ãã£ã³ã°ã«ã¼ã«ã§ãã
ãã®ä¾ã§ã¯ evenodd
ã«ã¼ã«ã使ç¨ãã¦ãã¾ãã
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
ctx.beginPath();
ctx.arc(50, 50, 30, 0, Math.PI * 2, true);
ctx.arc(50, 50, 15, 0, Math.PI * 2, true);
ctx.fill("evenodd");
}
<canvas id="canvas" width="100" height="100" role="presentation"></canvas>
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