Dom7 — это лёгкая и мощная библиотека для работы с DOM в JavaScript, активно используемая в рамках фреймворка Framework7. Одной из ключевых задач при работе с динамическими интерфейсами является управление анимациями. Иногда требуется не просто запускать анимацию, но и корректно её останавливать, предотвращая нежелательные визуальные эффекты или конфликт с другими действиями пользователя.
В Dom7 управление анимациями реализуется через сочетание методов библиотеки для манипуляции CSS-свойствами и встроенных функций JavaScript для работы с таймерами.
clearTimeout и
clearIntervalАнимации, созданные через функции setTimeout или
setInterval, могут быть остановлены с помощью стандартных
JavaScript-методов:
let animationId = setInterval(() => {
$$('.box').css('left', '+=5px');
}, 16);
// Остановка анимации
clearInterval(animationId);
Важный момент: при использовании Dom7 часто применяются цепочки методов с переходами и анимациями CSS. В таких случаях нужно хранить идентификатор таймера, чтобы иметь возможность его отменить.
transitionEndДля CSS-переходов (transition) Dom7 позволяет отслеживать окончание
анимации через событие transitionEnd. Остановка анимации
может быть реализована путем удаления классов с анимацией и
принудительного завершения перехода:
let box = $$('.box');
box.addClass('animate'); // запуск анимации
// Остановка анимации
box.removeClass('animate');
box.transition(0); // мгновенное завершение анимации
Метод .transition(0) устанавливает длительность перехода
в ноль, что позволяет мгновенно остановить активную анимацию.
Dom7 предоставляет удобные методы для работы с CSS-анимациями:
.css(property, value) — изменение одного или нескольких
CSS-свойств. Используется для изменения состояний элементов в процессе
анимации..animate(properties, duration, easing, complete) —
запуск анимации с указанными свойствами.Пример:
let box = $$('.box');
box.animate({ left: '100px', opacity: 0.5 }, 500, 'linear', () => {
console.log('Анимация завершена');
});
// Принудительная остановка анимации
box.stop(true, true);
Метод .stop() позволяет:
Важно правильно указывать параметры метода .stop():
clearQueue — очищает очередь
анимаций;jumpToEnd — мгновенно завершает текущую
анимацию, применяя конечные CSS-состояния.Dom7 поддерживает цепочки анимаций. Если на элемент навешано несколько анимаций, важно контролировать их последовательность, чтобы остановка одной анимации не нарушала остальные:
let box = $$('.box');
box.animate({ left: '50px' }, 300)
.animate({ top: '100px' }, 300)
.animate({ opacity: 0.5 }, 300);
// Остановка всех анимаций в очереди
box.stop(true, true);
Без параметра true очередь не очищается, и последующие
анимации будут выполнены после остановки текущей.
let isAnimating = false;
function moveBox() {
if (isAnimating) return;
isAnimating = true;
$$('.box').animate({ left: '200px' }, 500, () => {
isAnimating = false;
});
}
.stop() перед новой
анимацией Чтобы предотвратить наложение анимаций:$$('.box').stop(true, true).animate({ left: '300px' }, 400);
$$('.box').removeClass('slide').css({ transform: 'none' });
Dom7 часто используется для мобильных приложений, где плавность и отзывчивость интерфейса критична. Неправильная остановка анимаций может вызвать «дергание» элементов или зависание интерфейса. Рекомендации:
.stop(true, true) при резких изменениях
состояния интерфейса.transitionEnd/animationEnd..stop() — основной инструмент для
Dom7-анимаций.Эффективная остановка анимаций позволяет создавать стабильный, отзывчивый и предсказуемый интерфейс, предотвращая визуальные артефакты и «гонку» элементов.