Skip to content
  1. Компоненты
  2. FetchIt
  3. Всплывающие сообщения
  4. Notiflix.Notify

Notiflix.Notify ​

Notiflix — набор UI-модулей на чистом JS. Для тостов нужен модуль Notify, стили он добавляет сам.

Подключение и FetchIt.Message ​

Библиотека подключается как ES-модуль. Модули выполняются отложенно, как defer, поэтому FetchIt в них уже доступен и DOMContentLoaded не нужен:

html
<script type="module">
  import Notiflix from 'https://cdn.jsdelivr.net/npm/notiflix@3/+esm'

  Notiflix.Notify.init({
    position: 'right-top',
    timeout: 5000,
    clickToClose: true,
    pauseOnHover: true,
  })

  const show = (message, display) => {
    const text = FetchIt.sanitizeHTML(message).trim()
    if (text) {
      display(text)
    }
  }

  FetchIt.Message = {
    success: (message) => show(message, (text) => Notiflix.Notify.success(text)),
    error: (message) => show(message, (text) => Notiflix.Notify.failure(text)),
  }
</script>

Модуль должен стоять в HTML после скрипта FetchIt — плагин подключает его в <head>, так что достаточно разместить модуль ниже, например перед </body>.

Почему текст проходит через sanitizeHTML и зачем проверка на пустую строку — в общем разделе.

Индикатор загрузки ​

У Notiflix есть и модуль Loading — затемнение страницы со спиннером на время отправки. Показывайте его по fetchit:before, а убирайте по fetchit:success и fetchit:error:

js
// В том же модуле, после import
document.addEventListener('fetchit:before', (e) => {
  if (!e.defaultPrevented) {
    Notiflix.Loading.circle()
  }
})

for (const name of ['fetchit:success', 'fetchit:error']) {
  document.addEventListener(name, () => Notiflix.Loading.remove())
}

Notiflix из import виден только внутри модуля, поэтому код идёт туда же. Подключайте модуль после клиентской валидации: если она отменит отправку, e.defaultPrevented уже будет true. Подробнее — в примере индикатора отправки.