Спецификация HTML5 привнесла в Веб множество новых и захватывающих технологий. Здесь мы подробно остановимся только на одной: на API Canvas. Он предназначен для рисования красивых, необычных вещей.
Canvas — это новый DOM API для рисования на двух- или трёхмерном холсте. Далее рассматривается только 2D-версия, но 3D-технология называется WebGL, и с её помощью делаются невероятные вещи.
Первое, что нужно знать, это то, что canvas является новым элементом в спецификации HTML5. Чтобы начать рисовать на canvas, вы хватаетесь за него и извлекаете определённый контекст ─ либо 2d, либо webgl:
var canvas = document.querySelector('canvas'), ctx = canvas.getContext('2d');
Оттуда вы можете начать рисовать, заполнять и обводить фигуры и текст на холсте. Вот пример, который рисует простой квадрат на холсте.
<canvas></canvas> <script> var canvas = document.querySelector('canvas'), ctx = canvas.getContext('2d'); ctx.fillRect(10, 10, 10, 10); </script>
Попробуйте это на странице, чтобы увидеть маленький чёрный квадрат!
Функция getContext извлекла правильный контекст, который представляет собой объект, методы которого используются для рисования, заливки и общего изменения canvas. Выше мы использовали fillRect, который принимает положения x и y верхнего левого угла прямоугольника в качестве первых двух аргументов, а размеры ширины и высоты ─ в качестве последних двух.
Анимация
canvas работает немного как настоящий холст ─ пиксели рисуются и накладываются друг на друга, пока вы не сотрёте ─ очистите их.
Это означает, что если вы хотите анимировать что-то, движущееся по холсту, вам придётся многократно очищать холст (или его часть) и перерисовывать сцену.
В следующем примере мы анимируем квадрат, прыгающий вокруг canvas, размер которого автоматически изменяется, чтобы заполнить экран. loop ─ это бизнес-часть кода. Функция clearRect используется для очистки всего холста перед каждым кадром.
var canvas = document.querySelector('canvas'), ctx = canvas.getContext('2d'); var resize = function () { canvas.width = window.innerWidth; canvas.height = window.innerHeight; }; window.addEventListener('resize', resize); window.addEventListener('load', function () { resize(); var pos, vel; pos = { x: 10, y: 10 }; vel = { x: 1, y: 1 }; var loop = function () { ctx.clearRect(0, 0, canvas.width, canvas.height); pos.x += vel.x; pos.y += vel.y; if (pos.x < 5 || pos.x > canvas.width - 5) { vel.x *= -1; } if (pos.y < 5 || pos.y > canvas.height - 5) { vel.y *= -1; } ctx.fillRect(pos.x - 5, pos.y - 5, 10, 10); }; setInterval(loop, 1000 / 60); });
С canvas можно многое изучить, это был лишь поверхностный взгляд на него.
Страницы в тему:
- Следующая страница: Локальное хранилище
- Предыдущая страница: Создание элементов