내 케이스는 CSS 테두리 렌더링을 모방 한 것입니다. 메서드를 CanvasRenderingContext2D::setLineDash
과 함께 사용하면 CSS 렌더러와 동일한 테두리 그림을 시뮬레이트 할 수 있습니다 (예 : border: 5px dashed red
). 이 예제를 고려하십시오같은 방법으로 캔버스에 점선 및 점선으로 된 사각형을 그립니다. css border가 작동합니다. 동일한 가장자리 4 개를 그립니다.
let canvas = document.querySelector('canvas');
let ctx = canvas.getContext('2d');
ctx.lineWidth = 5
ctx.strokeStyle = 'red'
ctx.lineCap = 'square'
ctx.setLineDash([10, 10]);
ctx.beginPath();
ctx.moveTo(2.5,2.5);
ctx.rect(2.5, 2.5, 195, 65);
ctx.stroke();
div {
border: 5px dashed red;
width: 200px;
height: 70px;
box-sizing: border-box;
margin-bottom: 5px;
}
canvas {
display: block;
width: 200px;
height: 70px;
}
<div></div>
<canvas width=200 height=70></canvas>
당신은 문제가 가장자리에 알 수 있습니다.
내가 빈틈과 대시 크기를 수정하려고했지만, 그것은 CSS의 예에서와 동일한 동작을 얻을 수없는 것 같다 가장자리에 라인이 측면에 선 후 더 크다. 해결 방법으로 모든면을 선으로 그릴 수 있다고 상상할 수 있지만rect
메서드를 사용하여 한 획으로 그립니다.
미리 감사드립니다.
감사는 설명과 데모를위한 많은입니다. 대시를 렌더링하는 데 가장 예측 가능하고 올바른 방법 인 것처럼 보이는 줄을 사용하고 'round'를 사용하여 점을 사용합니다. – tenbits