В части 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”