Библиотека fullPage.js предоставляет мощный инструмент для создания полноэкранных скролл-страниц с плавными переходами между секциями. При этом ключевой аспект производительности — оптимизация анимаций и плавности переходов, особенно на мобильных устройствах и слабых ПК.
Параметр scrollingSpeed определяет скорость перехода
между секциями в миллисекундах:
new fullpage('#fullpage', {
scrollingSpeed: 700
});
< 400 ms)
делает анимацию резкой, что может восприниматься как дергание.> 1200 ms)
замедляет взаимодействие пользователя с сайтом.fullPage.js позволяет использовать CSS-переходы для анимации элементов внутри секций через события:
afterLoad — вызывается после завершения перехода к
секции.onLeave — вызывается перед уходом со секции.Пример применения CSS-анимации:
new fullpage('#fullpage', {
afterLoad: function(origin, destination, direction){
const section = destination.item;
section.querySelectorAll('.animate').forEach(el => {
el.classList.add('fade-in');
});
},
onLeave: function(origin, destination, direction){
const section = origin.item;
section.querySelectorAll('.animate').forEach(el => {
el.classList.remove('fade-in');
});
}
});
CSS:
.animate {
opacity: 0;
transform: translateY(50px);
transition: opacity 0.6s ease-out, transform 0.6s ease-out;
}
.animate.fade-in {
opacity: 1;
transform: translateY(0);
}
Для оптимизации работы с DOM в fullPage.js важно уменьшить layout thrashing:
style через JS внутри анимаций.width,
height, top, left. Лучше
использовать transform и opacity..section-element {
transform: translate3d(0, 50px, 0);
transition: transform 0.6s ease-out, opacity 0.6s ease-out;
}
translate3d автоматически включает GPU ускорение, что
повышает производительность на мобильных устройствах.Чтобы сократить время первоначальной загрузки страницы, рекомендуется:
loading="lazy".Пример:
afterLoad: function(origin, destination, direction){
const images = destination.item.querySelectorAll('img[data-src]');
images.forEach(img => {
img.src = img.dataset.src;
img.removeAttribute('data-src');
});
}
fullPage.js предоставляет опции:
normalScrollElements — элементы с нормальной
прокруткой, исключаемой из fullPage.fitToSection — авто-подгонка к секции, которую можно
отключить для динамичных страниц.new fullpage('#fullpage', {
fitToSection: false,
normalScrollElements: '.scrollable-content'
});
fitToSection при тяжелых анимациях
предотвращает конфликты между скроллом и анимацией,
повышая отзывчивость.fullPage.js позволяет конфигурировать поведение отдельно для мобильных:
new fullpage('#fullpage', {
responsiveWidth: 768,
responsiveHeight: 600,
scrollingSpeed: 500
});
scrollingSpeed делает
анимацию быстрее и более отзывчивой.paint,
recalculate style, layout.scrollingSpeed.transform и opacity.Эти подходы обеспечивают плавность и отзывчивость при работе с fullPage.js, снижая нагрузку на браузер и повышая общую производительность страницы.