Рубрики
Без рубрики

Начало работы с Canvas API: Комплексные формы

Создайте сложные формы с помощью Canvas API. Помечено HTML, JavaScript.

В части 1 начала работы с POLVAS API я пошел на основы создания линий и прямоугольников. Здесь я собираюсь обсудить создание более сложных форм.

Во-первых, я собираюсь создать элемент холста 300×300 и получить ссылку на нее в JavaScript.


const ctx = document.getElementById('canvas').getContext('2d');

Подключение линий

Как я объяснил частично I, вы можете создавать строки, начиная к пути (используя rightPath () ), построение значений X, Y начала и конца вашей линии, используя moveto () и Lineto () Методы и создание линии ход () Отказ Вы действительно можете продолжать построение точек для вашей линии, прежде чем создавать ход.

Когда Lineto () используется, он создает концевую точку X, Y для линии. Когда он используется снова вдоль того же пути, линия простирается от предыдущей конечной точки.

ctx.lineWidth = 3; // just making it a little more visible
ctx.beginPath();
ctx.moveTo(20,20);
ctx.lineTo(20,100);
ctx.lineTo(100,100);
ctx.lineTo(20,200);
ctx.lineTo(100,200);
ctx.lineTo(200, 20);
ctx.lineTo(200, 200);
ctx.stroke();

Треугольники

Для того, чтобы создать замкнутую форму, вы можете создать Lineto () Вернуться к отправной точке.

ctx.lineWidth = 6;
ctx.beginPath();
ctx.moveTo(ctx.canvas.width/2, 20);
ctx.lineTo(20, ctx.canvas.height - 20);
ctx.lineTo(ctx.canvas.width - 20, ctx.canvas.height - 20);
ctx.lineTo(ctx.canvas.width/2,20);
ctx.stroke();

Но, что здесь происходит?

Вы можете исправить это, изменив Fillcap вашей линии, но тогда она не совсем соответствует другим поворотам.

ctx.fillCap = 'round';

Вместо того, чтобы меняться Fillcap Вот лучший вариант:

Использовать ClosePath () вместо финала Lineto () Точка соединения, и он автоматически связывает эти точки аккуратно.

ctx.lineWidth = 6;
ctx.beginPath();
ctx.moveTo(ctx.canvas.width/2, 20);
ctx.lineTo(20, ctx.canvas.height - 20);
ctx.lineTo(ctx.canvas.width - 20, ctx.canvas.height - 20);
ctx.closePath(); // <--- replaced the final lineTo with closePath
ctx.stroke();

Линия присоединяется

Есть также Линейше Варианты для стиля вашего сегмента связи: скос , Митра и круглый . круглый раунды от углов, Митра Присоединяется к внешним краям сегментов линии до одной точки и является по умолчанию, а скос Заполняет конечную точку подключенных сегментов линии и отключится.

Формы наполнения

Вы можете заполнить форму, используя Заворот и заполнить () Отказ

ctx.fillStyle = 'red'; < --- set the color
ctx.lineWidth = 6;
ctx.beginPath();
ctx.moveTo(ctx.canvas.width/2, 20);
ctx.lineTo(20, ctx.canvas.height - 20);
ctx.lineTo(ctx.canvas.width - 20, ctx.canvas.height - 20);
ctx.fill(); < --- fill the shape
ctx.closePath();
ctx.stroke();

Заказать вопросы здесь. Если вы заполнить () после ход () Наброски появятся тоньше, потому что заполнение находится сверху.

ctx.fillStyle = 'red';
ctx.lineWidth = 6;
ctx.beginPath();
ctx.moveTo(ctx.canvas.width/2, 20);
ctx.lineTo(20, ctx.canvas.height - 20);
ctx.lineTo(ctx.canvas.width - 20, ctx.canvas.height - 20);
ctx.closePath();
ctx.stroke();
ctx.fill(); < --- fill the shape after creating the stroke

Оригинал: “https://dev.to/robotspacefish/getting-started-with-the-canvas-api-complex-shapes-4gag”