Журнал Тильды
/
Библиотека промптов
/
Всплывающее окно с предложением после задержки
Лид-магнит
Всплывающее окно с предложением после задержки
Всплывающее окно с акцией, лид-магнитом или полезным предложением, которое появляется после 20 секунд на сайте.
Промпт
Вы можете скопировать промпт и вставить его в вайб блок в поле ввода. Подробнее в инструкции.
Сделай всплывающее окно с предложением для сайта [тип компании].

Учитывай следующий контекст: предложение — [описание акции, бесплатного материала или специального предложения]. Заголовок окна — «[заголовок]». Текст — [короткое описание]. Текст кнопки — «[текст кнопки]». Кнопка ведёт на [ссылка или якорь]. Время задержки перед показом — [количество секунд].

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

Представь его так: через заданное время после загрузки страницы появляется компактное модальное окно. Внутри — заголовок, короткий текст, при необходимости изображение и одна основная кнопка. Крестик закрытия хорошо заметен в правом верхнем углу. Сзади появляется затемнённая подложка. На телефоне окно становится компактным вертикальным блоком с текстом и кнопкой.

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

Контент должен легко редактироваться в Тильде: все карточки, фото и тексты сразу в HTML, без генерации через JS, массивы, innerHTML или canvas. Фото — img с data-tilda-img="y", тексты — с data-tilda-edit="y". JS только для анимации и синхронизации декоративных фрагментов с главным img. В редакторе покажи главное фото и все обороты статично для выбора и замены контента; не перехватывай клики.

Окно имеет сплошной непрозрачный фон, а затемняющая подложка закрывает страницу целиком. Пока окно открыто, основная страница не прокручивается, плавающие иконки Тильды не перекрывают его элементы. Закрыть окно можно крестиком, нажатием на подложку или клавишей Esc. После закрытия подложка и блокировка прокрутки полностью снимаются. Кнопка ведёт только на заданную ссылку, а не на несуществующую форму. Не придумывай скидки, сроки акции, бонусы и условия, которых нет в исходных данных.

Используй шрифты и цвета из стилей проекта, текст не мельче 15 пикселей. Все надписи читаются целиком, кнопка расширяется под свой текст. На мобильных устройствах содержимое прокручивается внутри окна, если не помещается по высоте, при этом крестик остаётся доступным. Учитывай настройку уменьшения движения: при её включении открывай окно без анимации. Все стили и обработчики изолированы внутри блока и не изменяют другие разделы Тильды.

Хороший результат: окно появляется в заданный момент, не раздражает повторными показами, легко закрывается и даёт посетителю понятный следующий шаг.
Скопировать промпт
Код
Вы можете скопировать код и вставить его в вайб блок в раздел код. Подробнее в инструкции.
<section id="vb-p7q-root" class="vb-p7q" data-section-name="Всплывающее окно с памяткой" data-vibeblock-unique-section="yes" aria-hidden="true">
<style>
.vb-p7q,
.vb-p7q * { box-sizing: border-box; }
.vb-p7q input,
.vb-p7q textarea,
.vb-p7q select { font: inherit; }

.vb-p7q { position: fixed; inset: 0; z-index: 2147483000; pointer-events: none; font-family: var(--t-text-font, "Inter", "Helvetica Neue", Arial, sans-serif); }
.vb-p7q[data-state="open"] { pointer-events: auto; }

.vb-p7q__backdrop {
position: absolute;
inset: 0;
background: rgba(15, 24, 18, 0.62);
backdrop-filter: blur(2px);
-webkit-backdrop-filter: blur(2px);
opacity: 0;
transition: opacity 260ms ease;
}
.vb-p7q[data-state="open"] .vb-p7q__backdrop { opacity: 1; }
.vb-p7q[data-state="closing"] .vb-p7q__backdrop { opacity: 0; }

.vb-p7q__dialog {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -46%) scale(0.96);
width: min(60vw, 800px);
max-height: min(80vh, 720px);
background: #ffffff;
color: #1f2a24;
border-radius: 18px;
box-shadow: 0 28px 64px rgba(15, 24, 18, 0.28), 0 4px 14px rgba(15, 24, 18, 0.12);
display: flex;
align-items: stretch;
overflow: hidden;
opacity: 0;
transition: transform 280ms cubic-bezier(0.22, 0.61, 0.36, 1), opacity 220ms ease;
}
.vb-p7q[data-state="open"] .vb-p7q__dialog {
transform: translate(-50%, -50%) scale(1);
opacity: 1;
}
.vb-p7q[data-state="closing"] .vb-p7q__dialog {
transform: translate(-50%, -46%) scale(0.96);
opacity: 0;
}

.vb-p7q__close {
position: absolute;
top: 10px;
right: 10px;
width: 36px;
height: 36px;
display: inline-flex;
align-items: center;
justify-content: center;
background: transparent;
border: 0;
border-radius: 50%;
cursor: pointer;
color: #4b5b52;
transition: background-color 160ms ease, color 160ms ease;
z-index: 2;
}
.vb-p7q__close:hover,
.vb-p7q__close:focus-visible {
background: #eef3ee;
color: #1f2a24;
outline: none;
}
.vb-p7q__close svg { width: 18px; height: 18px; display: block; }

.vb-p7q__media {
flex: 0 0 38%;
min-width: 200px;
background: #d4e6d4;
display: flex;
align-items: stretch;
justify-content: center;
padding: 0;
overflow: hidden;
}
.vb-p7q__media img {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 0;
display: block;
}

.vb-p7q__body {
flex: 1 1 auto;
display: flex;
flex-direction: column;
justify-content: center;
padding: 28px 32px 28px 26px;
gap: 12px;
min-width: 0;
}
.vb-p7q__title {
font-family: var(--t-headline-font, "Inter", "Helvetica Neue", Arial, sans-serif);
font-size: 22px;
font-weight: 600;
line-height: 1.25;
color: #1f2a24;
margin: 0;
padding-right: 36px;
}
.vb-p7q__text {
font-size: 15px;
line-height: 1.5;
color: #4b5b52;
margin: 0;
}
.vb-p7q__action { margin-top: 8px; }

.vb-p7q__btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 12px 22px;
min-height: 44px;
font-family: var(--t-text-font, "Inter", "Helvetica Neue", Arial, sans-serif);
font-size: 15px;
font-weight: 500;
line-height: 1.2;
color: #ffffff;
background: #2f7d4f;
border: 0;
border-radius: 10px;
cursor: pointer;
text-decoration: none;
transition: background-color 160ms ease, transform 160ms ease, box-shadow 160ms ease;
box-shadow: 0 4px 12px rgba(47, 125, 79, 0.22);
white-space: nowrap;
}
.vb-p7q__btn:hover,
.vb-p7q__btn:focus-visible {
background: #266a42;
box-shadow: 0 6px 16px rgba(47, 125, 79, 0.28);
outline: none;
}
.vb-p7q__btn:active { transform: translateY(1px); }

@media (max-width: 640px) {
.vb-p7q__dialog {
width: calc(100vw - 24px);
max-height: calc(100vh - 24px);
flex-direction: column;
border-radius: 16px;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
}
.vb-p7q__media {
flex: 0 0 auto;
height: 180px;
padding: 0;
background: #d4e6d4;
}
.vb-p7q__media img { max-height: 180px; }
.vb-p7q__body {
padding: 16px 22px 24px;
gap: 10px;
}
.vb-p7q__title {
font-size: 20px;
padding-right: 44px;
}
.vb-p7q__text { font-size: 15px; }
.vb-p7q__btn { width: auto; align-self: flex-start; }
.vb-p7q__close { top: 8px; right: 8px; }
}

@media (max-width: 360px) {
.vb-p7q__btn { width: 100%; justify-content: center; }
}

@media (prefers-reduced-motion: reduce) {
.vb-p7q__backdrop,
.vb-p7q__dialog { transition: none; }
.vb-p7q[data-state="open"] .vb-p7q__dialog { transform: translate(-50%, -50%); }
}

html.vb-p7q-lock,
body.vb-p7q-lock { overflow: hidden !important; }
</style>

<div class="vb-p7q__backdrop" data-vb-p7q-close="" aria-hidden="true"></div>

<div class="vb-p7q__dialog" role="dialog" aria-modal="true" aria-labelledby="vb-p7q-title" aria-describedby="vb-p7q-text">
<button class="vb-p7q__close" type="button" data-vb-p7q-close="" aria-label="Закрыть окно">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<line x1="6" y1="6" x2="18" y2="18"></line>
<line x1="18" y1="6" x2="6" y2="18"></line>
</svg>
</button>

<div class="vb-p7q__media">
<img src="https://static.tildacdn.com/tila3731-6361-4535-b232-623732303766/photo-1680717762678-.jpg" alt="Комнатное растение в горшке" loading="lazy">
</div>

<div class="vb-p7q__body">
<h2 class="vb-p7q__title" id="vb-p7q-title">Пусть ваши растения будут здоровыми</h2>
<p class="vb-p7q__text" id="vb-p7q-text">Заберите короткую памятку с базовыми правилами ухода за популярными комнатными растениями.</p>
<div class="vb-p7q__action">
<a class="vb-p7q__btn" href="/#care-guide">Открыть памятку</a>
</div>
</div>
</div>

<script>
(function () {
var DELAY_MS = 20000;
var STORAGE_KEY = 'vb-p7q-shown';
var GUARD_HASH = '#care-guide';
var root = document.getElementById('vb-p7q-root');
if (!root) return;
if (root.dataset.vbP7qInit === '1') return;
root.dataset.vbP7qInit = '1';

var storage;
try {
storage = window.sessionStorage;
} catch (e) {
storage = null;
}
if (storage && storage.getItem(STORAGE_KEY) === '1') return;

var onCareGuide = false;
try {
var hash = window.location && window.location.hash ? window.location.hash : '';
var path = window.location && window.location.pathname ? window.location.pathname.toLowerCase() : '';
if (hash === GUARD_HASH || hash.indexOf('care-guide') !== -1) onCareGuide = true;
if (path.indexOf('care-guide') !== -1) onCareGuide = true;
} catch (e) {
onCareGuide = false;
}
if (onCareGuide) return;

var reduceMotion = false;
try {
reduceMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
} catch (e) {
reduceMotion = false;
}

var closeTimer = null;
var openTimer = setTimeout(show, DELAY_MS);

function lockScroll(on) {
var b = document.body;
var h = document.documentElement;
if (on) {
if (!b.classList.contains('vb-p7q-lock')) {
b.classList.add('vb-p7q-lock');
h.classList.add('vb-p7q-lock');
}
} else {
b.classList.remove('vb-p7q-lock');
h.classList.remove('vb-p7q-lock');
}
}

function show() {
if (!root || root.dataset.state === 'open' || root.dataset.state === 'closing') return;
if (storage) {
try { storage.setItem(STORAGE_KEY, '1'); } catch (e) { /* ignore */ }
}
root.setAttribute('data-state', 'open');
root.setAttribute('aria-hidden', 'false');
lockScroll(true);
if (reduceMotion) {
var dlg = root.querySelector('.vb-p7q__dialog');
var bd = root.querySelector('.vb-p7q__backdrop');
if (dlg) dlg.style.transition = 'none';
if (bd) bd.style.transition = 'none';
}
var focusable = root.querySelector('.vb-p7q__close');
if (focusable && typeof focusable.focus === 'function') {
try { focusable.focus({ preventScroll: true }); } catch (e) { focusable.focus(); }
}
}

function hide() {
if (!root || root.dataset.state !== 'open') return;
root.setAttribute('data-state', 'closing');
root.setAttribute('aria-hidden', 'true');
var duration = reduceMotion ? 0 : 260;
clearTimeout(closeTimer);
closeTimer = setTimeout(finish, duration);
}

function finish() {
if (!root) return;
root.removeAttribute('data-state');
lockScroll(false);
var dlg = root.querySelector('.vb-p7q__dialog');
var bd = root.querySelector('.vb-p7q__backdrop');
if (dlg) dlg.style.transition = '';
if (bd) bd.style.transition = '';
}

root.addEventListener('click', function (e) {
var t = e.target;
if (t && t.closest && t.closest('[data-vb-p7q-close]')) {
e.preventDefault();
hide();
}
});

document.addEventListener('keydown', function (e) {
if (e.key === 'Escape' || e.keyCode === 27) {
if (root.getAttribute('data-state') === 'open') hide();
}
});

window.addEventListener('beforeunload', function () {
lockScroll(false);
});
})();
</script>
</section>
Скопировать код
Что выбрать, промпт или код?
Копируйте промпт, если хотите получить похожий результат, но ввести информацию о своём бизнесе и задать свои требования. Например, изменить кнопки, тексты, цвета, фотографии или другие элементы.
Копируйте код, если хотите получить точно такой же блок. Чтобы его изменить, придётся отредактировать html-код.
Начните создание сайта на Тильде с простой регистрации на платформе
Made on
Tilda