Работа с onOpen и onClose колбэками

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

onOpen колбэк

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

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

Пример использования onOpen:

const modal = new tingle.modal({
  onOpen: function() {
    console.log('Модальное окно открыто');
    document.body.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
  }
});

modal.open();

В данном примере при открытии модального окна изменяется фон страницы, создавая темный эффект для подложки.

Работа с параметрами onOpen

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

Пример с анимацией:

const modal = new tingle.modal({
  onOpen: function() {
    const content = document.querySelector('.tingle-modal-box');
    content.classList.add('animate__fadeIn');
  }
});

modal.open();

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

onClose колбэк

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

Как и в случае с onOpen, колбэк onClose также регистрируется во время создания окна или позже, и не требует передачи дополнительных параметров.

Пример использования onClose:

const modal = new tingle.modal({
  onClose: function() {
    console.log('Модальное окно закрыто');
    document.body.style.backgroundColor = '';
  }
});

modal.open();
modal.close();

В этом примере при закрытии окна восстанавливается оригинальный фон страницы.

Асинхронные операции в onOpen и onClose

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

Для этого в колбэке можно использовать асинхронные функции и промисы.

Пример с асинхронной операцией в onOpen:

const modal = new tingle.modal({
  onOpen: async function() {
    const data = await fetchDataFromAPI();
    document.querySelector('.modal-content').textContent = data;
  }
});

modal.open();

В данном примере сначала выполняется запрос на сервер для получения данных, и только после получения данных модальное окно наполняется информацией.

Управление состоянием с onOpen и onClose

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

Колбэки onOpen и onClose идеально подходят для этого. Например, можно заблокировать или активировать кнопки при открытии и закрытии модального окна.

Пример блокировки кнопок:

const modal = new tingle.modal({
  onOpen: function() {
    document.querySelector('.submit-btn').disabled = true;
  },
  onClose: function() {
    document.querySelector('.submit-btn').disabled = false;
  }
});

modal.open();

Здесь при открытии окна кнопка отправки формы становится недоступной, а при закрытии окна она снова становится активной.

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

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

Пример:

const modal = new tingle.modal({
  onOpen: function() {
    document.querySelector('.close-btn').addEventListener('click', function() {
      modal.close();
    });
  },
  onClose: function() {
    console.log('Модальное окно закрыто. Очистка данных...');
    clearFormFields();
  }
});

modal.open();

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

Программное закрытие окна

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

const modal = new tingle.modal({
  onClose: function() {
    console.log('Модальное окно закрыто после выполнения операции');
  }
});

// Закрытие окна через код после выполнения задачи
setTimeout(() => {
  modal.close();
}, 2000);

В этом примере окно закроется через две секунды после того, как будет выполнена операция. Колбэк onClose сработает, когда окно будет закрыто.

Резюме

Использование колбэков onOpen и onClose в tingle.js позволяет гибко настроить поведение модальных окон, улучшая взаимодействие с пользователем и предоставляя множество возможностей для интеграции с другими частями интерфейса. Эти колбэки идеально подходят для асинхронных операций, управления состоянием интерфейса и обработки событий, что делает их мощным инструментом в работе с модальными окнами.