Featherlight — минималистичная lightbox-библиотека на базе jQuery, не имеющая встроенной логики управления мультимедиа. Автовоспроизведение видео реализуется за счёт правильной инициализации содержимого и использования параметров видео-плееров или HTML5 API. Featherlight лишь отображает контент и предоставляет хуки жизненного цикла, на которых и строится управление воспроизведением.
Механизм всегда сводится к одному из двух подходов:
play() у HTML5-видео в момент
открытия lightbox.Featherlight не вмешивается в содержимое, поэтому ответственность за запуск видео полностью лежит на разработчике.
YouTube поддерживает автозапуск через параметр
autoplay=1. Featherlight может открывать iframe
напрямую:
<a href="https://www.youtube.com/embed/VIDEO_ID?autoplay=1"
data-featherlight="iframe">
Открыть видео
</a>
Ключевые моменты:
embed-URL;autoplay=1 должен быть в строке запроса;data-featherlight="iframe" указывает Featherlight
отобразить iframe.Современные браузеры блокируют автозапуск видео со звуком. Для гарантированного автозапуска требуется:
autoplay=1&mute=1
Пример:
<a href="https://www.youtube.com/embed/VIDEO_ID?autoplay=1&mute=1"
data-featherlight="iframe">
Без mute=1 видео часто не стартует автоматически,
особенно в Chrome и Safari.
Vimeo использует аналогичный подход:
<a href="https://player.vimeo.com/video/VIDEO_ID?autoplay=1&muted=1"
data-featherlight="iframe">
Отличия от YouTube:
muted=1 вместо mute=1;player.vimeo.com.HTML5-видео открывается как inline-контент:
<video id="video1" controls preload="none">
<source src="video.mp4" type="video/mp4">
</video>
<a href="#video1" data-featherlight="inline">Открыть</a>
В этом виде автовоспроизведение не произойдёт автоматически, даже при
наличии атрибута autoplay.
Featherlight предоставляет callbacks, которые позволяют управлять видео:
$.featherlight.defaults.afterOpen = function () {
const video = this.$content.find('video').get(0);
if (video) {
video.play();
}
};
$.featherlight.defaults.beforeClose = function () {
const video = this.$content.find('video').get(0);
if (video) {
video.pause();
video.currentTime = 0;
}
};
Что здесь происходит:
afterOpen срабатывает после отображения lightbox;video.play() инициирует воспроизведение;beforeClose останавливает видео и сбрасывает
позицию.Для стабильного автозапуска:
<video muted playsinline>
Атрибуты:
При наличии нескольких видео в одном документе логика должна учитывать контекст текущего lightbox:
$(document).on('featherlight:opened', function (event, featherlight) {
const video = featherlight.$content.find('video')[0];
if (video) video.play();
});
$(document).on('featherlight:close', function (event, featherlight) {
const video = featherlight.$content.find('video')[0];
if (video) {
video.pause();
video.currentTime = 0;
}
});
Такой подход:
Featherlight часто используется с AJAX-контентом. В этом случае видео
появляется уже после открытия окна, и стандартный afterOpen
может быть недостаточен.
Пример с AJAX:
<a href="video.html" data-featherlight="ajax">Видео</a>
$(document).on('featherlight:content', function (event, featherlight) {
const video = featherlight.$content.find('video')[0];
if (video) video.play();
});
Событие featherlight:content срабатывает в момент, когда
контент уже загружен и вставлен в DOM.
Видео не запускается автоматически
muted;Видео продолжает играть после закрытия
beforeClose или
featherlight:close;$content.Мобильные устройства игнорируют autoplay
playsinline;muted по умолчанию;autoplay без
JavaScript-контроля.Такой подход обеспечивает предсказуемое поведение автовоспроизведения в Featherlight во всех современных браузерах и сценариях использования.