Skip to main content

Всплывающее окно при закрытии страницы

Всплывающее окно при закрытии страницы

Стоп-форма — это всплывающее окно, призывающее к действию, которое открывается через определенное время нахождения пользователя на странице или когда он пытается покинуть её. Чаще всего стоп-формы используются на Landing page.

Стоп-форма по таймеру

Рассмотрим пример вплывающего окна с формой на Bootsrap, которое вызывается если пользователь находится на странице более 10 сек:

<html>
<body>
<head>
<!-- Подключаем Bootstrap -->
<link rel='stylesheet' id='mts_bootstrap-css'  href='https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css?ver=1.0' type='text/css' media='all' />
</head>
<div id="stop-modal" class="modal fade show">
	<div class="modal-dialog modal-dialog-centered">
		<div class="modal-content">
			<div class="modal-header">
				<h5 class="modal-title">Стоп-форма</h5>
				<button type="button" class="close" data-dismiss="modal">
					<span aria-hidden="true">×</span>
				</button>
			</div>
			<div class="modal-body">
				<form action="/" method="POST">
					<div class="form-content">
						<div class="form-row">
							<div class="col-md-12">
								<div class="form-group">
									<input type="text" name="name" class="form-control" title="" value="" placeholder="Ваше имя" />
								</div>
								<div class="form-group">
									<input type="tel" name="phone" class="form-control" title="" value="" placeholder="Ваше телефон" />
								</div>
								<div class="form-group">
									<input type="text" name="email" class="form-control" title="" value="" placeholder="Ваше E-mail" />
								</div>	
							</div>
							<div class="col-md-12">
								<input type="submit" class="btn btn-primary" value="Отправить">
							</div>
					</div>
				</form>
			</div>
		</div>	
	</div>
</div>

<!-- Подключаем jQuery -->
<script type='text/javascript' src='http://code.jquery.com/jquery-3.3.1.min.js?ver=1.0'></script>

<!-- Подключаем js-файл Bootstrap -->
<script type='text/javascript' src='https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js?ver=1.0'></script>

<!-- Функция Стоп-формы -->
<script>
function stopModal(){
	$("#stop-modal").modal('show');
}
setTimeout(stopModal, 10000); // время в мс
</script>

</body>
</html>

За вызов формы отвечает вот эта небольшая JavaScript функция:

function stopModal(){
	$("#stop-modal").modal('show');
}
setTimeout(stopModal, 10000); // время в мс

Стоп-форма при закрытии страницы

Заменим функцию таймера на следующий код:

// Вызываем окно если курсор мыши вышел за границы страницы
$(document).mouseleave(function(e){
    if (e.clientY < 0) {
        $("#stop-modal").modal('show');
    }    
});
// Если стоп-форму закрыли, то удаляем её, чтобы она больше не срабатывала
$('#stop-modal').on('hidden.bs.modal', function () {
    $("#stop-modal").remove();
});

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

Полный код:

<html>
<body>
<head>
<!-- Подключаем Bootstrap -->
<link rel='stylesheet' id='mts_bootstrap-css'  href='https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css?ver=1.0' type='text/css' media='all' />
</head>
<div id="stop-modal" class="modal fade show">
	<div class="modal-dialog modal-dialog-centered">
		<div class="modal-content">
			<div class="modal-header">
				<h5 class="modal-title">Стоп-форма</h5>
				<button type="button" class="close" data-dismiss="modal">
					<span aria-hidden="true">×</span>
				</button>
			</div>
			<div class="modal-body">
				<form action="/" method="POST">
					<div class="form-content">
						<div class="form-row">
							<div class="col-md-12">
								<div class="form-group">
									<input type="text" name="name" class="form-control" title="" value="" placeholder="Ваше имя" />
								</div>
								<div class="form-group">
									<input type="tel" name="phone" class="form-control" title="" value="" placeholder="Ваше телефон" />
								</div>
								<div class="form-group">
									<input type="text" name="email" class="form-control" title="" value="" placeholder="Ваше E-mail" />
								</div>	
							</div>
							<div class="col-md-12">
								<input type="submit" class="btn btn-primary" value="Отправить">
							</div>
					</div>
				</form>
			</div>
		</div>	
	</div>
</div>

<!-- Подключаем jQuery -->
<script type='text/javascript' src='http://code.jquery.com/jquery-3.3.1.min.js?ver=1.0'></script>

<!-- Подключаем js-файл Bootstrap -->
<script type='text/javascript' src='https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js?ver=1.0'></script>

<!-- Функция Стоп-формы -->
<script>
// Вызываем окно если курсор мыши вышел за границы страницы
$(document).mouseleave(function(e){
    if (e.clientY < 0) {
        $("#stop-modal").modal('show');
    }    
});
// Если стоп-форму закрыли, то удаляем её, чтобы она больше не срабатывала
$('#stop-modal').on('hidden.bs.modal', function (e) {
    $("#stop-modal").remove();
});
</script>

</body>
</html>
Похожие записи
Сохранение данных в форме после обновления страницы

Часто ли у вас случалось такое, что при заполнении формы на сайте истекал срок действия... Читать далее

Кастомный виджет переводчик для сайта с флагами

Сегодня мы кастомизируем стандартный виджет Google переводчика для сайта и сделаем его в виде меню... Читать далее

AJAX в 1C-Битрикс

В компонентах Битрикс есть встроенный функционал для AJAX подгрузки. Его так же можно использовать, например... Читать далее

Отправка письма с вложениями на PHP и AJAX

Мы уже рассматривали, как сделать форму обратной связи на PHP и Ajax. Сегодня мы модернизируем... Читать далее

Простая пагинация на PHP и MySQL

Это руководство о том, как сделать простое разбиение на страницы, используя PHP и MySQL с... Читать далее

Календарь в input для ввода даты

Чтобы при вводе даты в input выпадал удобный календарик можно воспользоваться двумя способами: стандартным полем... Читать далее

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

*

code