Каждый раз, когда вы рисуете прямоугольник, вы можете нарисовать меньший внутри. Например, если ширина и высота равны 100, вы вызовете:
context.strokeRect(0, 0, 100, 100);
Затем вы можете нарисовать меньший прямоугольник, используя предыдущие значения:
context.strokeRect(0 + 10, 0 + 10, 100 - 20, 100 - 20);
Чтобы разрешить это,вы должны задать параметры для вашей draw()
функции, чтобы можно было изменять положение и размер новых прямоугольников:
draw() => draw(x, y, width, height)
В вашем коде объявите две переменные x
и y
иназначьте значения по умолчанию (50 в вашем коде).
Тогда ваша draw()
функция:
function draw() {
context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.strokeRect(zoomedX(50), zoomedY(50), zoomed(width), zoomed(height));
}
Изменится так:
function draw(x, y, width, height) {
context.beginPath();
context.strokeRect(zoomedX(x), zoomedY(y), zoomed(width), zoomed(height));
}
Теперь у него есть параметры. Нам также необходимо удалить инструкцию очистки: эта функция предназначена для рисования, только эта. Более того, если вы не удалите очищающую линию, каждый чертеж удалит ранее нарисованные прямоугольники.
Наконец, вызовите функции draw(...)
в ваших обратных вызовах:
$width.addEventListener("keyup", function () {
width = this.value;
context.clearRect(0, 0, canvas.width, canvas.height);
draw(x, y, width, height);
draw(x + 5, y + 5, width - 10, height - 10);
draw(x + 10, y + 10, width - 20, height - 20);
}, false);
То же самое дляheight
. Поэтому каждый раз, когда вы обновляете значение width
или height
, оно будет рисовать 3 вложенных прямоугольника.
Вот скрипка: https://jsfiddle.net/nmerinian/jzeygapL/4/
Для теста я создал drawMultiple(x, y, width, height)
функция, которая рисует три прямоугольника:
function drawMultiple(x, y, width, height) {
draw(x, y, width, height);
draw(x + 5, y + 5, width - 10, height - 10);
draw(x + 10, y + 10, width - 20, height - 20);
}