> Как реализовать показ попапа через 3 секунды после захода на сайт с возможностью закрытия и запоминанием закрытия между сессиями? (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Tilda
Стек: JavaScript
> Пример ответа
Для реализации покажем попап через 3 секунды с запоминанием закрытия между сессиями, используем localStorage для хранения состояния. Вот пример на чистом JavaScript:
JAVASCRIPT// Функция для показа попапаfunction showPopup() {const popup = document.getElementById('popup');if (popup) {popup.style.display = 'block';}}// Функция для закрытия попапа и сохранения в localStoragefunction 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') или вручную в инструментах разработчика.
> Похожие задачи по frontend
Что делать чтобы не блокировать основной поток при обработке большого массива без использования web workers
Почему страница зависает при обработке большого массива в JavaScript
Что делает метод json() у объекта response в JavaScript
Что еще можно сделать с помощью замыканий в JavaScript кроме счетчика
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью