Featherlight — легковесная библиотека для создания модальных окон на
JavaScript. Одним из важных инструментов для динамического управления
поведением модального окна является параметр onResize. Этот
параметр позволяет реагировать на изменение размеров окна браузера или
самого модального контента, обеспечивая гибкость в интерфейсе и
корректное отображение контента.
onResizeПараметр onResize представляет собой функцию
обратного вызова, которая вызывается каждый раз, когда
модальное окно меняет свои размеры. Это может происходить как при
изменении размеров браузера, так и при динамических изменениях контента
внутри окна.
Использование onResize позволяет:
$.featherlight(element, {
onResize: function(event) {
// действия при изменении размеров
}
});
Параметр event содержит объект события, связанный с
изменением размеров. Однако чаще всего используется именно контекст
this, который ссылается на экземпляр
Featherlight. Через него можно получить доступ к основным
элементам окна:
this.$instance // контейнер модального окна
this.$content // контент модального окна
this.$overlay // фон модального окна
Автоматическое центрирование окна при изменении размера браузера:
$.featherlight('#myContent', {
onResize: function() {
var $window = $(window);
var $modal = this.$instance;
$modal.css({
top: ($window.height() - $modal.outerHeight()) / 2,
left: ($window.width() - $modal.outerWidth()) / 2
});
}
});
В этом примере onResize используется для постоянного
центрирования окна независимо от изменения размеров окна браузера.
Динамическая подгонка контента под размер окна:
$.featherlight('#imageGallery', {
onResize: function() {
var maxHeight = $(window).height() * 0.8;
var maxWidth = $(window).width() * 0.8;
this.$content.find('img').css({
maxHeight: maxHeight,
maxWidth: maxWidth
});
}
});
Такой подход позволяет изображениям всегда оставаться в пределах видимой области без прокрутки.
onResize
this всегда ссылается на экземпляр Featherlight.
Использование стрелочной функции для определения onResize
приведет к потере контекста.onResize
вызывается не только при изменении размеров браузера, но и при первом
рендеринге модального окна. Это позволяет сразу подстроить контент под
начальные размеры окна.onResize
или использовать throttling/debouncing.Пример с использованием debounce:
function debounce(func, wait) {
let timeout;
return function() {
clearTimeout(timeout);
timeout = setTimeout(func.bind(this), wait);
};
}
$.featherlight('#myContent', {
onResize: debounce(function() {
this.$instance.css('top', ($(window).height() - this.$instance.outerHeight()) / 2);
}, 100)
});
Это предотвращает множественные вызовы функции при непрерывном изменении размеров окна.
onResize часто комбинируют с параметрами:
beforeOpen — для подготовки размеров перед открытием
окна;afterContent — для подгонки контента после вставки
HTML;afterResize (если определен вручную) — для выполнения
дополнительных действий после стандартной обработки изменения
размеров.Использование onResize в связке с этими событиями
позволяет полностью контролировать поведение окна при любых изменениях
внешнего и внутреннего контента.
onResize; использовать кэширование
элементов (this.$content.find(...)).Параметр onResize является ключевым инструментом для
создания адаптивных и гибких модальных окон в Featherlight, позволяя
контролировать каждый аспект отображения контента в зависимости от
размера окна и особенностей интерфейса.