HTML5 Canvas: как ограничить fillRect?
В HTML5 я хочу сделать fillRect() (с белым цветом заливки) и border (черным). Я не хочу использовать strokeRect(), Если я не смогу заполнить его позже. Я создаю игру, в которой вы нажимаете на квадраты, и они меняют цвет (это сложнее, чем это, но это то, на чем фокусируется внимание).
<canvas id="canvas1" width="400" height="300" style="border:1px solid #000000;"></canvas>
<script>
var c=document.getElementById("canvas1");
var ctx=c.getContext("2d");
ctx.strokeStyle="rgba(0,0,0,1)";
ctx.strokeRect(0,0,100,100);
</script>
Граница вокруг холста служит для справки.
Я тоже могу использовать CSS, но в настоящее время все находится в HTML.
2 ответов:
Определите положение, в котором вы хотите нарисовать квадрат с шириной и высотой. Как только вы это сделаете, просто нарисуйте сначала больший квадрат, который шире на 2 и выше на 2, но с той же центральной точкой. Итак, вы рисуете квадрат, который больше, а затем вы рисуете нормальный квадрат сверху, это дает вам иллюзию, что квадрат имеет границу
HTML
<canvas id="canvas1" width="400" height="300" style="border:1px solid #000000;"></canvas>CSS
#canvas1{ border: solid 1px black; }Javascript
var c=document.getElementById("canvas1"); var ctx=c.getContext("2d"); var rectXPos = 50; var rectYPos = 50; var rectWidth = 100; var rectHeight = 100; drawBorder(rectXPos, rectYPos, rectWidth, rectHeight) ctx.fillStyle='#FFF'; ctx.fillRect(rectXPos, rectYPos, rectWidth, rectHeight); function drawBorder(xPos, yPos, width, height, thickness = 1) { ctx.fillStyle='#000'; ctx.fillRect(xPos - (thickness), yPos - (thickness), width + (thickness * 2), height + (thickness * 2)); }Jsfiddle link : https://jsfiddle.net/jxgw19sh/2/
-- обновление --
Добавьте дополнительный параметр в
drawBorder, называемыйthicknessзначение по умолчанию равно 1, но вы можете ввести в функцию любое другое число дляthickness, и она будет использовать значение вместо 1.
Вы не можете заполнить его позже без библиотеки. Если вы хотите что-то изменить, просто перерисуйте. Вы можете использовать что-то вроде этого:
ctx.fillStyle = 'blue'; ctx.strokeStyle = 'red'; var fillRect = false; ctx.rect(20, 20, 150, 100); if (fillRect) { ctx.fill(); } ctx.stroke();Он будет рисовать только границу, если вы измените
fillRectнаtrueон будет заполнен. Вы можете обновить свой холст на каждомrequestAnimationFrame.Но, может быть, вы хотите использовать библиотеку, как бумагу.JS. Это делает такие вещи, как нажатие на объекты намного проще, и это абстрагирует рисует на холсте к объектам, которые вы создали один раз и обновить позже, как то, что вы просили.
Comments