Dom7 — это легковесная библиотека для работы с DOM, вдохновлённая синтаксисом jQuery. Одной из часто используемых возможностей является управление видимостью элементов через fade-эффекты. Они позволяют плавно изменять прозрачность элементов, создавая визуально приятные переходы между состояниями интерфейса.
В Dom7 нет встроенных методов fadeIn и
fadeOut, как в jQuery, но благодаря гибкой работе с
классами, стилями и CSS-переходами, fade-эффекты можно реализовать легко
и эффективно.
fadeOut)Fade-эффект исчезновения подразумевает постепенное уменьшение
непрозрачности элемента до нуля с последующим скрытием
его из DOM или установки display: none.
function fadeOut(el, duration = 400) {
el.style.transition = `opacity ${duration}ms`;
el.style.opacity = 1;
requestAnimationFrame(() => {
el.style.opacity = 0;
});
setTimeout(() => {
el.style.display = 'none';
}, duration);
}
const element = document.querySelector('.box');
fadeOut(element, 500);
Объяснение кода:
transition задаёт длительность анимации.requestAnimationFrame используется для гарантии того,
что браузер зарегистрирует начальное состояние
(opacity = 1) перед началом анимации.display: none.fadeIn)Fade-in — противоположный эффект. Элемент становится видимым и постепенно увеличивает прозрачность до полной.
function fadeIn(el, duration = 400, display = 'block') {
el.style.opacity = 0;
el.style.display = display;
el.style.transition = `opacity ${duration}ms`;
requestAnimationFrame(() => {
el.style.opacity = 1;
});
}
const element = document.querySelector('.box');
fadeIn(element, 500);
Ключевые моменты:
0, иначе
эффект не будет видимым.display необходимо установить перед началом
анимации, иначе элемент останется скрытым.Dom7 облегчает работу с селекторами, переборами и событиями, что делает интеграцию fade-эффектов удобной.
import Dom7 from 'dom7';
const $$ = Dom7;
const elements = $$('.box');
elements.each(el => {
fadeOut(el, 300);
});
$$('.show-btn').on('click', () => {
elements.each(el => fadeIn(el, 300));
});
Особенности:
$$('.box') возвращает коллекцию элементов Dom7..each() позволяет обрабатывать все элементы
коллекции..on()) интегрируются с эффектами плавного
отображения.Для гибкой анимации удобно использовать параметры длительности и колбэки после завершения fade.
function fadeOut(el, duration = 400, callback) {
el.style.transition = `opacity ${duration}ms`;
el.style.opacity = 1;
requestAnimationFrame(() => el.style.opacity = 0);
setTimeout(() => {
el.style.display = 'none';
if (callback) callback();
}, duration);
}
fadeOut(document.querySelector('.box'), 600, () => console.log('Элемент исчез'));
Преимущества подхода:
Fade можно сочетать с изменением размеров, перемещением, скейлингом или другими CSS-свойствами.
function fadeSlideUp(el, duration = 400) {
el.style.transition = `opacity ${duration}ms, transform ${duration}ms`;
el.style.opacity = 1;
el.style.transform = 'translateY(0)';
requestAnimationFrame(() => {
el.style.opacity = 0;
el.style.transform = 'translateY(-20px)';
});
setTimeout(() => el.style.display = 'none', duration);
}
Особенности комбинированного эффекта:
transition.opacity и transform
предпочтительнее, чем анимация top, left или
height — это ускоряет рендер и снижает нагрузку на
браузер.requestAnimationFrame гарантирует, что браузер будет
анимировать кадры максимально плавно.Dom7 удобно комбинировать с CSS-анимациями через классы.
.fade-in {
opacity: 1;
transition: opacity 0.4s;
}
.fade-out {
opacity: 0;
transition: opacity 0.4s;
display: none;
}
const element = $$('.box').eq(0);
element.removeClass('fade-out').addClass('fade-in');
setTimeout(() => element.removeClass('fade-in').addClass('fade-out'), 500);
Преимущества:
Fade-эффекты в Dom7 обеспечивают плавность интерфейса, легко интегрируются с событиями и позволяют создавать интерактивные, визуально привлекательные веб-страницы при минимальных усилиях. Контроль через JavaScript или классы CSS делает их гибкими и масштабируемыми для любых проектов.