Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Как в canvase сделать так, чтобы пользователь мог менять размер фигуры, длину, ширину, радиус и т. д. на js?

СервисыГрафический дизайн+1
Андрей Миронов
  ·   · 2,5 K
старший разработчик в pseven.io  · 29 сент 2021
Строго говоря, элемент Canvas такой возможности не предоставляет. Вы должны реализовать её сами на этапе формирования фигуры до вывода её на Canvas. Вы также можете использовать уже готовое решение (библиотеку).
Canvas — это элемент для вывода растровой графики. Размер фигуры, радиус окружности и т.п. — это понятия векторной графики. При переводе из вектора в растр все эти параметры теряются, остаются только пиксели и их цвета.
У Canvas действительно есть методы для рисования геометрических фигур. Например, окружность можно нарисовать вот так:
ctx.beginPath();
ctx.arc(x, y, radius, 0, 2 * Math.PI);
ctx.stroke();
Здесь radius это радиус окружности. Чтобы он зависел от каких-то действий пользователя, нужно явно обработать это в коде:
  1. Нарисовать окружность изначального радиуса
  2. Ждать нужных действий пользователя
  3. При получении нового сигнала пересчитать радиус
  4. Очистить Canvas
  5. Нарисовать новую окружность с измененным радиусом, перейти к п. 2
Конкретная реализация зависит от конкретных требований — что, где как и от каких действий пользователя должно меняться — и выходит за рамки ответа на Кью. В качестве стартового примера могу порекомендовать "Drawing with mouse events" из MDN — там рисуются линии по координатам мыши. Это не изменение, а дорисовывание фигур на Canvas, но общая суть та же — программа реагирует на ввод пользователя и выводит линии по полученным координатам.
Что-то осталось непонятно? Спроси в нашей группе в Телеграме!Перейти на t.me/jstsmentor
Инженер-программист  · 29 сент 2021
Создаешь 2 переменные: width, height. На onchage инпута сетаешь в эти переменные значения. Достаешь 2дконтекст, создаешь ф-цию draw и рисуешь прямоугольник используя созданные ранее переменные. Вызываешь requestAnimationFrame(draw)