RU (Русский) Перевод
Здравствуйте, будущие веб-разработчики! Сегодня мы отправляемся в увлекательное путешествие в мир анимации DOM с использованием JavaScript. Как ваш добрый сосед по компьютерным наукам, я с радостью провожу вас через эту захватывающую тему. Поверьте мне, к концу этого урока вы научитесь оживлять веб-страницы с помощью движения!
Анимация DOM элементов с помощью JavaScript
Прежде чем мы углубимся в детали анимации, напомним briefly, что такое DOM. DOM означает Document Object Model, и это Essentially программный интерфейс для HTML-документов. Он представляет структуру документа в виде древовидной иерархии, позволяя нам манипулировать содержимым и структурой веб-страницы с помощью JavaScript.
Теперь, когда мы говорим об анимации DOM элементов, мы имеем в виду изменение их свойств со временем, чтобы создать иллюзию движения или преобразования. Это как создание анимации flip book, но с кодом!
Давайте начнем с простого примера:
<div id="myBox" style="width: 100px; height: 100px; background-color: red; position: absolute;"></div>
<script>
let box = document.getElementById('myBox');
let position = 0;
function moveBox() {
position += 1;
box.style.left = position + 'px';
}
setInterval(moveBox, 10);
</script>
В этом примере мы перемещаем красный ящик по экрану. Давайте разберем это:
- Мы создаем элемент
<div>
с некоторыми初始альными стилями. - Мы используем
document.getElementById('myBox')
, чтобы получить ссылку на наш ящик. - Мы определяем функцию
moveBox()
, которая увеличиваетposition
и обновляет стильleft
ящика. - Мы используем
setInterval()
для вызоваmoveBox()
каждые 10 миллисекунд, создавая плавную анимацию.
Анимация DOM элементов с использованием метода setInterval()
Метод setInterval()
- один из способов создания анимации в JavaScript. Он многократно вызывает функцию через specified интервалы. Вот более сложный пример:
<div id="bouncer" style="width: 50px; height: 50px; background-color: blue; border-radius: 25px; position: absolute;"></div>
<script>
let bouncer = document.getElementById('bouncer');
let x = 0;
let y = 0;
let dx = 2;
let dy = 2;
function animate() {
x += dx;
y += dy;
if (x > window.innerWidth - 50 || x < 0) dx = -dx;
if (y > window.innerHeight - 50 || y < 0) dy = -dy;
bouncer.style.left = x + 'px';
bouncer.style.top = y + 'px';
}
setInterval(animate, 10);
</script>
Этот скрипт создает эффект прыгающего мяча:
- Мы устанавливаем начальные позиции (
x
,y
) и скорости (dx
,dy
). - В функции
animate()
мы обновляем позицию на основе скорости. - Мы проверяем, ударил ли мяч в края окна, и изменяем направление, если это так.
- Мы обновляем положение мяча на экране.
-
setInterval()
вызываетanimate()
каждые 10 мс, создавая плавное движение.
Анимация DOM элементов с использованием метода requestAnimationFrame()
Хотя setInterval()
работает, modern браузеры предлагают более эффективный метод: requestAnimationFrame()
. Этот метод говорит браузеру, что вы хотите выполнить анимацию и запрашивает, чтобы браузер вызвал specified функцию для обновления анимации перед следующим перерисовыванием.
Давайте перепишем наш прыгающий мяч, используя requestAnimationFrame()
:
<div id="bouncer" style="width: 50px; height: 50px; background-color: green; border-radius: 25px; position: absolute;"></div>
<script>
let bouncer = document.getElementById('bouncer');
let x = 0;
let y = 0;
let dx = 2;
let dy = 2;
function animate() {
x += dx;
y += dy;
if (x > window.innerWidth - 50 || x < 0) dx = -dx;
if (y > window.innerHeight - 50 || y < 0) dy = -dy;
bouncer.style.left = x + 'px';
bouncer.style.top = y + 'px';
requestAnimationFrame(animate);
}
requestAnimationFrame(animate);
</script>
Основное различие здесь в том, что вместо использования setInterval()
, мы вызываем requestAnimationFrame(animate)
в конце нашей функции animate()
. Это создает цикл, в котором браузер вызывает animate()
непосредственно перед каждым перерисовыванием.
Анимация DOM элементов изменением свойств CSS
До сих пор мы изменяли стили напрямую с использованием JavaScript. Однако modern веб-разработка часто использует CSS transitions и анимации для более плавного выполнения. Давайте посмотрим, как мы можем инициировать CSS анимации с использованием JavaScript:
<style>
.box {
width: 100px;
height: 100px;
background-color: purple;
position: absolute;
transition: all 0.5s ease;
}
</style>
<div id="myBox" class="box"></div>
<script>
let box = document.getElementById('myBox');
let position = 0;
function moveBox() {
position += 50;
box.style.transform = `translateX(${position}px)`;
if (position < 200) {
requestAnimationFrame(moveBox);
}
}
box.addEventListener('click', function() {
position = 0;
requestAnimationFrame(moveBox);
});
</script>
В этом примере:
- Мы определяем CSS класс с свойством transition.
- Наша JavaScript функция изменяет свойство
transform
вместоleft
. - Мы используем
requestAnimationFrame()
для создания плавной анимации. - Анимация начинается при нажатии на ящик.
Этот метод часто приводит к более плавным анимациям, так как браузер может оптимизировать CSS transitions.
Вот таблица, резюмирующая методы, которые мы обсуждали:
Метод | Плюсы | Минусы |
---|---|---|
setInterval() |
Просто понять и реализовать | Может быть менее эффективным, может вызвать заикание |
requestAnimationFrame() |
Более эффективен, синхронизируется с частотой обновления браузера | Немного сложнее реализовать |
CSS Transitions | Очень плавно, может быть ускорено с помощью оборудования | Ограниченный контроль над шагами анимации |
помните, что анимация может greatly улучшить пользовательский опыт, но ее следует использовать с умом. Слишком много анимации может быть отвлекающим или даже вызывать головокружение у некоторых пользователей.
Вот и все для нашего путешествия в мир анимации DOM с использованием JavaScript! Надеюсь, вам понравился этот урок так же, как и мне было приятно его преподавать. Продолжайте практиковаться, продолжайте анимировать и, что самое главное, продолжайте получать удовольствие от кода!
Credits: Image by storyset