如何准确指定我需要填写的内容 HTML Canvas?
How do I specify exactly what I need to fill in HTML Canvas?
在我的应用程序中,我使用 HTML Canvas 创建了一个 canvas 我希望能够点击页面绘制一个填充颜色的圆圈,点击另一个页面的一部分,并让圆圈自动与一条线相连。
我几乎可以正常工作了,但是当我尝试填充我的圆圈时,它也填充了圆圈之间的 space。
这是我尝试使用 ctx.fill()
:
时的样子
let hasCircle = false;
document.addEventListener('click', onMouseMove);
const c = document.getElementById("canvas");
const ctx = c.getContext("2d");
// Create a circle on page click
document.getElementById('canvas').onclick = function(event) {
ctx.arc(event.clientX - 10, event.clientY - 10, 4, 0, 2 * Math.PI);
ctx.fill()
if (!hasCircle) {
hasCircle = true;
}
}
// Connect circles with a line
function onMouseMove(event) {
if (hasCircle) {
ctx.lineTo(event.clientX - 10, event.clientY - 10);
ctx.stroke();
}
}
function reset() {
hasCircle = false;
}
#canvas {
border: 1px solid black;
}
<canvas id="canvas"></canvas>
有没有办法准确指定我想要填充的颜色?
如果你有一个单独的函数,可以根据你的状态(即你拥有的点数)完全重绘 canvas,你会玩得更好。
const c = document.getElementById("canvas");
const ctx = c.getContext("2d");
const points = [];
function redraw() {
c.width = c.width; // clear canvas
if (!points.length) return;
// Fill points one by one
ctx.fillStyle = "rgba(255, 0, 0, 0.5)";
points.forEach(([x, y]) => {
ctx.beginPath();
ctx.arc(x, y, 4, 0, 2 * Math.PI);
ctx.fill();
});
// Begin new path for polygon
ctx.beginPath();
points.forEach(([x, y], i) => {
if (i == 0) ctx.moveTo(x, y);
else ctx.lineTo(x, y);
});
ctx.lineTo(points[0][0], points[0][1]);
ctx.stroke();
}
document.getElementById("canvas").addEventListener("click", (event) => {
points.push([event.clientX - 10, event.clientY - 10]);
redraw();
});
#canvas {
border: 1px solid black;
}
<canvas id="canvas"></canvas>
在我的应用程序中,我使用 HTML Canvas 创建了一个 canvas 我希望能够点击页面绘制一个填充颜色的圆圈,点击另一个页面的一部分,并让圆圈自动与一条线相连。
我几乎可以正常工作了,但是当我尝试填充我的圆圈时,它也填充了圆圈之间的 space。
这是我尝试使用 ctx.fill()
:
let hasCircle = false;
document.addEventListener('click', onMouseMove);
const c = document.getElementById("canvas");
const ctx = c.getContext("2d");
// Create a circle on page click
document.getElementById('canvas').onclick = function(event) {
ctx.arc(event.clientX - 10, event.clientY - 10, 4, 0, 2 * Math.PI);
ctx.fill()
if (!hasCircle) {
hasCircle = true;
}
}
// Connect circles with a line
function onMouseMove(event) {
if (hasCircle) {
ctx.lineTo(event.clientX - 10, event.clientY - 10);
ctx.stroke();
}
}
function reset() {
hasCircle = false;
}
#canvas {
border: 1px solid black;
}
<canvas id="canvas"></canvas>
有没有办法准确指定我想要填充的颜色?
如果你有一个单独的函数,可以根据你的状态(即你拥有的点数)完全重绘 canvas,你会玩得更好。
const c = document.getElementById("canvas");
const ctx = c.getContext("2d");
const points = [];
function redraw() {
c.width = c.width; // clear canvas
if (!points.length) return;
// Fill points one by one
ctx.fillStyle = "rgba(255, 0, 0, 0.5)";
points.forEach(([x, y]) => {
ctx.beginPath();
ctx.arc(x, y, 4, 0, 2 * Math.PI);
ctx.fill();
});
// Begin new path for polygon
ctx.beginPath();
points.forEach(([x, y], i) => {
if (i == 0) ctx.moveTo(x, y);
else ctx.lineTo(x, y);
});
ctx.lineTo(points[0][0], points[0][1]);
ctx.stroke();
}
document.getElementById("canvas").addEventListener("click", (event) => {
points.push([event.clientX - 10, event.clientY - 10]);
redraw();
});
#canvas {
border: 1px solid black;
}
<canvas id="canvas"></canvas>