Кастомные обработчики событий DOM

Библиотека BasicLightbox предназначена для создания простых модальных окон, которые можно использовать для отображения изображений, видео и других элементов в браузере. Одной из ключевых особенностей при работе с модальными окнами является возможность интеграции кастомных обработчиков событий. В этом разделе рассмотрим, как можно использовать и настраивать обработчики событий при работе с BasicLightbox.

Основные события в BasicLightbox

Библиотека предоставляет несколько стандартных событий, которые можно использовать для взаимодействия с модальными окнами. Основными являются:

  • ‘show’ — срабатывает при открытии модального окна.
  • ‘hide’ — срабатывает при закрытии модального окна.

Эти события можно подключить как на уровне самого окна, так и с использованием методов библиотеки для более сложной кастомизации.

Добавление кастомных обработчиков событий

Для добавления кастомных обработчиков событий в BasicLightbox используется метод .on() библиотеки, который позволяет подписаться на стандартные события. Пример подключения обработчика события:

const lightbox = basicLightbox.create('<img src="path/to/image.jpg">');

lightbox.element().addEventListener('show', function() {
    console.log('Модальное окно открыто');
});

В этом примере при открытии модального окна в консоли будет выводиться сообщение «Модальное окно открыто».

Настройка событий для закрытия окна

Кроме базовых событий «show» и «hide», можно добавить события для обработки пользовательского закрытия окна. Например, часто требуется закрыть окно при клике за его пределами или на кнопке «Закрыть». Для этого можно использовать дополнительные события:

const lightbox = basicLightbox.create('<img src="path/to/image.jpg">');

lightbox.element().addEventListener('hide', function() {
    console.log('Модальное окно закрыто');
});

lightbox.show();

В этом примере событие «hide» будет срабатывать всякий раз, когда окно закрывается. Можно настроить закрытие окна по щелчку за пределами окна:

document.querySelector('.lightbox-close').addEventListener('click', function() {
    lightbox.close();
});

Использование событий с делегированием

В случае, когда необходимо обработать события, связанные с элементами внутри модального окна, можно использовать делегирование событий. В этом случае обработчик событий назначается на родительский элемент, а затем проверяется, к какому именно элементу произошло событие. Это особенно полезно, когда элементы в модальном окне могут динамически добавляться или изменяться.

Пример делегирования для обработки кликов по элементам внутри модального окна:

lightbox.element().addEventListener('click', function(event) {
    if (event.target.matches('.lightbox-close')) {
        lightbox.close();
    }
});

Здесь обработчик будет срабатывать только тогда, когда клик произойдет на элементе с классом lightbox-close.

Обработка событий с использованием jQuery

Для разработчиков, которые используют jQuery в своем проекте, библиотека BasicLightbox также поддерживает работу с этим инструментом. В этом случае можно легко добавлять события, используя методы jQuery. Пример:

const lightbox = basicLightbox.create('<img src="path/to/image.jpg">');

$(lightbox.element()).on('show', function() {
    console.log('Модальное окно открыто через jQuery');
});

Этот подход может быть полезен, когда проект уже использует jQuery и необходимо интегрировать BasicLightbox с минимальными усилиями.

Пример работы с несколькими событиями

Для более сложных сценариев можно комбинировать различные события, как стандартные, так и кастомные. Например, можно добавить событие для показа модального окна и добавить дополнительное действие при его закрытии:

const lightbox = basicLightbox.create('<img src="path/to/image.jpg">');

lightbox.element().addEventListener('show', function() {
    console.log('Окно открыто');
    // Дополнительная логика, например, при загрузке изображения
});

lightbox.element().addEventListener('hide', function() {
    console.log('Окно закрыто');
    // Очистка данных или скрытие элементов
});

lightbox.show();

Ожидание пользовательских событий с Promise

BasicLightbox поддерживает работу с промисами, что позволяет использовать события в асинхронных сценариях. Например, можно создать промис, который будет ожидать пользовательского взаимодействия перед закрытием окна:

const lightbox = basicLightbox.create('<img src="path/to/image.jpg">');

function waitForClose() {
    return new Promise((resolve) => {
        lightbox.element().addEventListener('hide', resolve);
    });
}

lightbox.show();
waitForClose().then(() => {
    console.log('Пользователь закрыл окно');
});

В этом примере промис будет ожидать, пока окно не будет закрыто, после чего выполнится код внутри .then().

Обработка событий в цепочках

В случаях, когда необходимо выполнить несколько операций при одном событии, можно использовать цепочку событий. Например, сначала показываем окно, затем выполняем дополнительные операции, и после этого закрываем окно:

const lightbox = basicLightbox.create('<img src="path/to/image.jpg">');

lightbox.element().addEventListener('show', function() {
    console.log('Окно открыто');
    // Дополнительная логика, например, анимации или загрузка данных
    setTimeout(() => {
        lightbox.close();
    }, 3000); // Закрытие окна через 3 секунды
});

lightbox.show();

Таким образом, можно выстраивать сложные логики взаимодействия с пользователем, привязываясь к различным событиям и используя возможности библиотеки для улучшения UX.

Заключение

Использование кастомных обработчиков событий в библиотеке BasicLightbox дает разработчику гибкость и позволяет настроить поведение модальных окон в соответствии с потребностями проекта. Подключение стандартных событий, использование делегирования событий, работа с промисами и добавление асинхронных операций — всё это делает BasicLightbox мощным инструментом для создания адаптивных и интерактивных модальных окон.