Сегодня будет очень интересный урок, на котором мы узнаем, как создаются 3D-объекты с помощью HTML5. В этот раз мы сделаем четырехугольную звезду, которая будет вращаться вокруг своей оси. Будет реализовано несколько вариантов вращения, поэтому будьте внимательны.
Вот исходники и демо:
Шаг 1. HTML
Как обычно мы начинаем с HTML кода.
index.html
<!DOCTYPE html> <html lang="ru" > <head> <meta charset="utf-8" /> <title>Как создать анимированный 3D объект на холсте в HTML5 | officialplat-tt.ru</title> <link rel="stylesheet" type="text/css" href="css/main.css" /> <script type="text/javascript" src="js/main.js"></script> </head> <body> <div class="example"> <canvas id="star_object" style="border:1px solid black;"><p class="noCanvas">Извините, но ваш браузер не поддерживает Canvas в HTML5</canvas> </div> <footer> <h2>Как создать анимированный 3D объект на холсте в HTML5</h2> <a href="http://officialplat-tt.ru/?p=1707" class="stuts">Вернуться на <span>officialplat-tt.ru</span></a> </footer> </body> </html>
Ничего особенного нет, кроме тега canvas.
Шаг 2. CSS
css/main.css
Стили применяются только для позиционирования элементов на странице, поэтому я их не буду тут указывать. Файл со стилями можно найти в исходниках.
Step 3. JS
Вот наш JS код:
js/main.js
var iStarSize = 150; var iCanvasWidth = 500; var iCanvasHeight = 500; var context, canvas; var x, y; var degrees = 0.0; var dx, dy; function run() { degrees += 0.1; if (x + dx > iStarSize/2 || x + dx < -iStarSize/2) dx = -dx; x += dx; /*if (y + dy > iStarSize/2 || y + dy < -iStarSize/2) // на будущее dy = -dy; y += dy;*/ render(); } function render() { context.clearRect(0, 0, iCanvasWidth, iCanvasWidth); context.save(); // установить начальную позицию context.translate( iStarSize * 1.5, iStarSize * 1.5 ); // установить свойства стиля context.fillStyle = '#bbb'; context.strokeStyle = '#000'; context.lineWidth = 2; // начало произвольного объекта - звезда context.beginPath(); // раскоментируйте строку, если хотите сделать поворот на плоскости //context.rotate(degrees); // изменение необходимых точек для моделирования 3D вращения context.moveTo( 0, -iStarSize ); context.lineTo( iStarSize / 10 - x / 5, - iStarSize / 5 ); context.lineTo( iStarSize / 2 - x, 0 ); context.lineTo( iStarSize / 10 - x / 5, iStarSize / 5 ); context.lineTo( 0, iStarSize ); context.lineTo( -iStarSize / 10 + x / 5, iStarSize / 5 ); context.lineTo( -iStarSize / 2 + x, 0 ); context.lineTo( -iStarSize / 10 + x / 5, - iStarSize / 5 ); context.lineTo( 0, -iStarSize ); // добавить тень к объекту context.shadowOffsetX = 10; context.shadowOffsetY = 10; context.shadowBlur = 4; context.shadowColor = 'rgba(180, 180, 180, 0.8)'; // заполнить фигуру, нарисовать рамку context.fill(); context.stroke(); context.closePath(); context.restore(); // вывести некоторую отладочную информацию context.font = '12px Verdana'; context.fillStyle = '#000'; context.fillText('x: ' + x + '; y: ' + y, 10, 15); context.fillText('dx: ' + dx + '; dy: ' + dy, 10, 30); } window.onload = function(){ canvas = document.getElementById('star_object'); // установить размер нашего холста canvas.width = iCanvasWidth; canvas.height = iCanvasWidth; context = canvas.getContext('2d'); // определения внутренних переменных x = y = 1; dx = dy = 4; setInterval(run, 20); };
Я оставил комментарии в своем коде, думаю, что вопросов появиться не должно. Обратите внимание на то, что я делаю в функции render, так как именно там происходит отрисовка фигуры.
Я надеюсь, что этот урок по работе с HTML5 был интересным, если у вас есть какие-нибудь предложения или Вы просто хотите что-либо сказать — оставляйте комментарии и я буду рад это услышать. Удачи!
Получайте новые статьи блога прямо себе на почту
Скажите, а где здесь, собственно, HTML5?
На мой взгляд, все вычисления делаются JavaScript программой…
Верно подмечено, отрисовка объекта осуществляется с помощью JS скрипта.
Здесь HTML5 — это тег canvas, на котором происходит отрисовка. Все же HTML — это язык разметки, с помощью него нельзя сделать вычислений. Советую ознакомиться с описанием тега на википедии
Элемент html5 canvas заключает в себе отличные возможности для создания по настоящему интерактивных веб-приложений, так как с его использованием у веб-мастеров отпадает необходимость устанавливать Flash Player.