← Назад к вопросам

Из чего состоит холст

2.0 Middle🔥 141 комментариев
#JavaScript Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Из чего состоит холст?

Canvas (холст) — это HTML элемент, который предоставляет API для рисования графики, анимаций и интерактивных элементов прямо в браузере. Это низкоуровневый инструмент для создания пиксельной графики.

Структура Canvas API

1. HTML элемент Canvas

Всё начинается с элемента, который выступает контейнером для графики:

<canvas id="myCanvas" width="800" height="600"></canvas>

Важные атрибуты:

  • width — ширина холста в пикселях (по умолчанию 300)
  • height — высота холста в пикселях (по умолчанию 150)
  • id — идентификатор для доступа из JavaScript

2. Контекст (Context)

Для рисования на canvas нужен контекст — объект, который содержит методы и свойства для рисования:

const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');  // 2D контекст

// Также существует '3d' (WebGL), но используется реже
const ctx3d = canvas.getContext('webgl');

2D контекст — самый популярный для 2D графики, анимаций и игр.

3. Система координат

Holst использует координатную систему, где:

  • (0, 0) — верхний левый угол
  • X растёт слева направо
  • Y растёт сверху вниз
  • Единица измерения — пиксель
(0,0) ----------> X
  |  
  |
  v
  Y

Основные компоненты Canvas API

1. Примитивные фигуры

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

// Прямоугольник
ctx.fillStyle = 'blue';
ctx.fillRect(10, 10, 100, 100);  // x, y, width, height
ctx.strokeStyle = 'black';
ctx.strokeRect(10, 10, 100, 100);

// Очистка области
ctx.clearRect(10, 10, 100, 100);

2. Пути (Paths)

Пути позволяют рисовать произвольные фигуры:

ctx.beginPath();  // Начало нового пути
ctx.moveTo(50, 50);  // Переместить "кисть" на координату
ctx.lineTo(150, 150);  // Нарисовать линию
ctx.lineTo(250, 50);
ctx.closePath();  // Закрыть путь (соединить с началом)
ctx.stroke();  // Обвести путь
ctx.fill();  // Закрасить путь

3. Окружности и дуги

ctx.beginPath();
ctx.arc(
  100, 100,  // центр (x, y)
  50,        // радиус
  0,         // начальный угол (в радианах)
  Math.PI * 2  // конечный угол (полный круг)
);
ctx.fill();

4. Текст

ctx.font = '20px Arial';
ctx.fillStyle = 'black';
ctx.textAlign = 'center';
ctx.fillText('Привет, холст!', 100, 50);

5. Изображения

const img = new Image();
img.src = '/image.jpg';
img.onload = () => {
  ctx.drawImage(img, 10, 10, 100, 100);  // x, y, width, height
};

6. Трансформации

// Сдвиг
ctx.translate(100, 100);

// Поворот (в радианах)
ctx.rotate(Math.PI / 4);

// Масштабирование
ctx.scale(2, 2);

// Сохранить и восстановить состояние
ctx.save();  // Сохранить текущее состояние
ctx.restore();  // Восстановить последнее сохранённое состояние

7. Стили и свойства

// Цвет заполнения
ctx.fillStyle = '#FF0000';  // Hex
ctx.fillStyle = 'rgb(255, 0, 0)';  // RGB
ctx.fillStyle = 'rgba(255, 0, 0, 0.5)';  // RGBA

// Цвет обводки
ctx.strokeStyle = 'black';

// Толщина линии
ctx.lineWidth = 3;

// Стиль окончания линии
ctx.lineCap = 'round';  // 'butt', 'round', 'square'

// Стиль соединения линий
ctx.lineJoin = 'round';  // 'miter', 'bevel', 'round'

// Прозрачность
ctx.globalAlpha = 0.5;

Практический пример: рисование движущегося квадрата

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

let x = 0;
const speed = 2;

function animate() {
  // Очистить холст
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  
  // Нарисовать квадрат
  ctx.fillStyle = 'blue';
  ctx.fillRect(x, 50, 50, 50);
  
  // Обновить позицию
  x += speed;
  
  // Перезапустить при достижении конца
  if (x > canvas.width) {
    x = 0;
  }
  
  // Следующий кадр
  requestAnimationFrame(animate);
}

animate();

Выводы

Holst состоит из:

  • HTML элемента с заданными шириной и высотой
  • 2D контекста, содержащего методы и свойства для рисования
  • Системы координат (0,0 в верхнем левом углу)
  • Примитивных фигур (прямоугольники, окружности, пути)
  • Свойств стилизации (цвета, толщина линий, трансформации)

Это мощный инструмент для создания игр, графических редакторов, анимаций и интерактивных приложений в браузере.

Из чего состоит холст | PrepBro