Спецификация 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 можно многое изучить, это был лишь поверхностный взгляд на него.
Страницы в тему:
- Следующая страница: Локальное хранилище
- Предыдущая страница: Создание элементов