В библиотеке Featherlight параметр
afterOpen является одним из ключевых хуков, позволяющих
выполнять пользовательский код сразу после того, как всплывающее окно
полностью открылось. Этот параметр используется для инициализации
дополнительного поведения, настройки элементов внутри модального окна
или запуска анимаций, которые должны происходить после отображения
содержимого.
afterOpen передается в конфигурационный объект при
инициализации Featherlight:
$.featherlight(content, {
afterOpen: function(event) {
// this — ссылка на текущий экземпляр Featherlight
console.log('Модальное окно открыто');
this.$content.css('background-color', '#f0f0f0');
}
});
Пояснение:
content — содержимое модального
окна (HTML, селектор, jQuery объект или текст).
afterOpen — функция обратного
вызова, выполняемая после полной отрисовки
окна.
this внутри функции ссылается на
экземпляр Featherlight, содержащий ключевые элементы:
this.$instance — весь DOM элемент модального окна.this.$content — непосредственно содержимое, которое
было передано в Featherlight.this.$overlay — слой затемнения (overlay) за модальным
окном.Когда содержимое модального окна загружается динамически (например,
через AJAX), afterOpen часто используется для инициализации
плагинов, скриптов или обработки событий:
$.featherlight({
ajax: 'content.html',
afterOpen: function(event) {
this.$content.find('.slider').slick(); // инициализация слайдера после загрузки
}
});
В этом примере слайдер внутри загруженного HTML инициализируется только после того, как Featherlight полностью открыл окно и вставил контент в DOM.
Featherlight поддерживает несколько событийных хуков:
beforeOpen — выполняется перед открытием окна,
позволяет подготовить данные.afterOpen — выполняется после отображения, когда окно
уже присутствует в DOM.beforeClose и afterClose — аналогичные
события для закрытия.Главное отличие afterOpen — доступность
полностью готового DOM модального окна, что особенно
важно для манипуляций с его содержимым или запуском анимаций.
$.featherlight('#loginForm', {
afterOpen: function() {
this.$content.find('input[name="username"]').focus();
}
});
$.featherlight('<div class="animated-box">Привет!</div>', {
afterOpen: function() {
this.$content.addClass('fadeIn');
}
});
$.featherlight('#promo', {
afterOpen: function() {
console.log('Промо окно показано пользователю');
// Можно добавить вызов аналитики
}
});
Внутри afterOpen возможен доступ к любым
пользовательским параметрам, переданным через объект
опций:
$.featherlight('<p>Сообщение</p>', {
customMessage: 'Привет мир!',
afterOpen: function() {
alert(this.customMessage);
}
});
afterOpen выполняется один раз
после каждого открытия окна. Для повторного открытия необходимо снова
полагаться на этот хук.afterOpen, так как это может замедлить анимацию
открытия.this.$content вместо прямых селекторов, чтобы избежать
конфликтов и ускорить работу.Если используется встроенная анимация openSpeed,
afterOpen гарантирует, что анимация
завершена, и все стили окончательно применены:
$.featherlight('#info', {
openSpeed: 300,
afterOpen: function() {
console.log('Анимация завершена, окно полностью видно');
}
});
Это позволяет синхронизировать внешние эффекты или скрипты с моментом завершения визуального открытия.
afterOpen — это инструмент для управления поведением
модального окна после его полной отрисовки. Используется для
инициализации скриптов, манипуляций с DOM, анимаций и аналитики. Главная
особенность — доступ к полностью сформированному DOM через
this.$content и this.$instance, что делает его
незаменимым при работе с динамическим или интерактивным контентом.