FullPage.js позволяет создавать интерактивные секции с вертикальной
или горизонтальной прокруткой. Одной из часто используемых возможностей
является автовоспроизведение видео при попадании секции в видимую
область экрана. Для этого требуется корректно интегрировать HTML5
<video> с событиями fullPage.js, учитывая загрузку,
воспроизведение и паузу видео.
Видео размещается внутри секции с классом section:
<div id="fullpage">
<div class="section">
<video id="video1" muted loop preload="auto" class="fp-video">
<source src="video1.mp4" type="video/mp4">
Ваш браузер не поддерживает видео.
</video>
</div>
<div class="section">
<video id="video2" muted loop preload="auto" class="fp-video">
<source src="video2.mp4" type="video/mp4">
</video>
</div>
</div>
Ключевые моменты:
muted необходим для автозапуска в большинстве
браузеров.loop позволяет воспроизводить видео
непрерывно.preload="auto" ускоряет готовность видео к
воспроизведению при попадании секции на экран.Для управления воспроизведением видео применяются колбэки
afterLoad и onLeave:
new fullpage('#fullpage', {
autoScrolling: true,
navigation: true,
sectionsColor: ['#1bbc9b', '#4BBFC3'],
afterLoad: function(origin, destination, direction){
const videos = destination.item.querySelectorAll('video');
videos.forEach(video => {
video.play().catch(error => console.warn('Автовоспроизведение не удалось:', error));
});
},
onLeave: function(origin, destination, direction){
const videos = origin.item.querySelectorAll('video');
videos.forEach(video => video.pause());
}
});
Разбор кода:
afterLoad срабатывает, когда секция становится
видимой.onLeave вызывается при уходе с текущей секции, что
позволяет приостанавливать видео.video.play() может вызвать ошибку в браузерах, если
видео не muted; для этого используется
catch.Если в секции несколько видео, достаточно выбрать все элементы через
querySelectorAll и запустить их циклом:
afterLoad: function(origin, destination, direction){
const videos = destination.item.querySelectorAll('video');
videos.forEach(video => {
video.currentTime = 0; // сброс позиции
video.play();
});
}
Пояснения:
currentTime = 0 гарантирует воспроизведение с
начала..fp-video.Браузеры блокируют воспроизведение видео со звуком. Для корректного автозапуска:
muted.Пример условного включения звука после пользовательского действия:
document.querySelector('#unmuteButton').addEventListener('click', () => {
const videos = document.querySelectorAll('.fp-video');
videos.forEach(video => {
video.muted = false;
video.play();
});
});
Для ускорения загрузки и снижения нагрузки на сеть можно использовать:
preload="metadata" для экономии трафика.data-src и
динамическое присвоение src при попадании секции на
экран.afterLoad: function(origin, destination, direction){
const videos = destination.item.querySelectorAll('video[data-src]');
videos.forEach(video => {
if(!video.src){
video.src = video.dataset.src;
video.load();
}
video.play();
});
}
Если используется горизонтальная прокрутка внутри секций
(slides), необходимо отслеживать события
afterSlideLoad и onSlideLeave:
afterSlideLoad: function(section, origin, destination, direction){
const videos = destination.item.querySelectorAll('video');
videos.forEach(video => video.play());
},
onSlideLeave: function(section, origin, destination, direction){
const videos = origin.item.querySelectorAll('video');
videos.forEach(video => video.pause());
}
Такое решение гарантирует корректное автовоспроизведение видео как в вертикальных секциях, так и в горизонтальных слайдах.
muted для надежного автозапуска.afterLoad и
onLeave.currentTime для повторного
воспроизведения.querySelectorAll и
циклы.preload минимизируют
нагрузку на сеть.afterSlideLoad и onSlideLeave.Автовоспроизведение видео в fullPage.js становится полностью управляемым, гибким и оптимизированным для различных устройств и браузеров, если соблюдать эти принципы.