Модальное окно по таймеру

Несколько вариантов на JS как в нужное время запустить на странице всплывающее окно.

Имеется модальное окно и открывающая его кнопка

Если на странице есть ссылка или кнопка, например, "Получить скидку" или "Заказать обратный звонок", которая открывает модалку, и ее же нужно открыть автоматически через некоторое время, то используем простенький JS:

Или на jQuery:

Этот код кликнет по элементу с ID modalopen через 10 секунд.

Примеры таких окон можно поглядеть в темах:

Если используются плагины, такие как Fancybox или Magnific Popup, то все тоже самое.

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

Имеется только модальное окно

Если нужно показать по таймеру всплывающее окно, открывать которое со страницы нет необходимости, другими словами нет такой кнопки, то самый простой способ это ее создать.

Создаем скрытую ссылку и дальше все из предыдущего примера.

При использовании плагинов можно использовать более сложный вариант - использовать их методы.

Например, для Fancybox 4 код будет таким:

Он откроет через 10 секунд модальное окно с ID modal-content

Нет ни окна, ни кнопки

В этом случае можно подключить плагины лайтбоксов (Fancybox 3, более новый Fancybox 4, Magnific Popup и др.), использовать примеры модалок из этого блога (ссылки выше) или коды ниже:

HTML
CSS
JS

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

Смотрите также:

Добавить комментарий:

Ваш комментарий отправлен!

Комментарии:

  • Jooker:

    Вариант работает только на задержку показа, куку не пишет, появляется на странице после обновления её...

    Ответить
  • Андрей:

    А как сделать чтобы показывалось, к примеру, через 1 час?!

    Ответить
    • Alexander:

      Время указывается в микросекундах, тут в примерах 10000 - это 10 секунд.

      Ответить
  • Тимур:

    Больше спасибо за ваш код, все работает.
    Вопрос, как правильно дописать в JS, чтобы модальное окно закрывалось не только по клику на #modal-close, но и по клику ВНЕ модального окна?

    Этот код имеется в виду:

        setTimeout(function(){
            modalwin = document.getElementById('modal-content');
            modalwin.style.display="block"; 
            document.getElementById("modal-close").addEventListener("click", function(){
                modalwin.style.display="none";  
                // записываем cookie на 1 день, с которой мы не показываем окно
                let date = new Date;
                date.setDate(date.getDate() + 1);    
                document.cookie = "mcookie=no; path=/; expires=" + date.toUTCString();
            });        
        }, 10000);
    
    Ответить
    • Alexander:

      Ниже функции для клика на кнопку:

      document.addEventListener( 'click', (e) => {
      	if (!e.composedPath().includes(modalwin)) {
      		// Тут тоже самое, что и по клику на кнопку.
      	}
      });
      Ответить
  • Slava:

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

    Спасибо.

    Ответить
    • Alexander:

      Сделать можно, через клик например, но браузер будет блокировать.
      Т.е. не открывать окно, а писать сообщение что он заблокировал окно.

      Ответить
  • Veaceslav:

    У вас была статья на такую тему вот https://atuin.ru/blog/vsplyvayushhee-okno-pri-zakrytii-stranicy/

    Ответить
  • Veaceslav:

    Подскажите пожалуйста как можно подключить функцию cookie. В смысле чтобы окно появлялось только 1 раз на всем сайте

    Ответить
    • Alexander:

      Для последнего варианта (на который даны коды) я могу добавить вариант для разового открытия окна, а вот на все остальные - это зависит от используемых модальных окон.

      Ответить
      • Veaceslav:

        Да, только для последнего варианта

        Ответить
    • Михаил:

      Через флаги
      Делаешь примерно так
      Const coc={
      saveCoc:false,
      }
      После показа и принятия условий меняешь на true
      И через if else прописывает условие не показывать, хранить в локал сторедж

      Ответить