> Как реализовать показ попапа через 3 секунды после захода на сайт с возможностью закрытия и запоминанием закрытия между сессиями? (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Tilda

Стек: JavaScript

> Пример ответа

Для реализации покажем попап через 3 секунды с запоминанием закрытия между сессиями, используем localStorage для хранения состояния. Вот пример на чистом JavaScript:

JAVASCRIPT
// Функция для показа попапа
function showPopup() {
const popup = document.getElementById('popup');
if (popup) {
popup.style.display = 'block';
}
}
// Функция для закрытия попапа и сохранения в localStorage
function closePopup() {
const popup = document.getElementById('popup');
if (popup) {
popup.style.display = 'none';
}
localStorage.setItem('popupClosed', 'true');
}
// Проверяем, был ли попап уже закрыт ранее
const isPopupClosed = localStorage.getItem('popupClosed');
if (!isPopupClosed) {
// Показываем попап через 3 секунды после загрузки страницы
setTimeout(showPopup, 3000);
}
// Назначаем обработчик на кнопку закрытия (предполагается, что у неё id="closePopupBtn")
document.getElementById('closePopupBtn').addEventListener('click', closePopup);

HTML-структура (пример):

HTML
<div id="popup" style="display: none; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: white; padding: 20px; border: 1px solid #ccc; z-index: 1000;">
<p>Содержимое попапа</p>
<button id="closePopupBtn">Закрыть</button>
</div>

Как это работает:

  • При загрузке страницы проверяется localStorage на ключ popupClosed.
  • Если ключа нет (попап не закрывался), через 3 секунды вызывается showPopup.
  • При нажатии на кнопку закрытия вызывается closePopup, которая скрывает попап и записывает popupClosed: 'true' в localStorage.
  • При последующих визитах localStorage хранит значение, и попап не показывается.

Важно: Если нужно сбросить запоминание (например, для тестирования), можно очистить localStorage через localStorage.removeItem('popupClosed') или вручную в инструментах разработчика.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью