О web-разработке
и даже немного больше...

Модальное окно на JQuery + CSS

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

В данном посту мы рассмотрим пример, как сделать модальное простое окно с помощью JQuery и CSS. Особенность данного примера в том, что тут не требуется дополнительные плагины, ну за исключением самой библиотеки JQuery.

Размещаем код модального окна на странице:

<div id="modal_form">
	<span id="modal_close">закрыть</span>
</div>
<div id="overlay"></div>

<a href="#" class="modal">Открыть модальное окно</a>

Как видно из разметки, блок самого модального окна это div c атрибутом id=modal_form, который содержит элемент span c id=modal_close. Этот элемент будет служить кнопкой для закрытия модального окна, кроме того, ниже блока расположен блок div с атрибутом id=overlay, который служит одновременно и для затемнения фона. Модальное окно будет открываться по ссылке, с классом modal.

Далее следует оформить разметку должным образом, для этого задаем стили для модального окна.
CSS для модального окна

#modal_form {
	width: 300px; 
	height: 300px;
	border-radius: 5px;
	border: 3px #000 solid;
	background: #fff;
	position: fixed;
	top: 45%;
	left: 50%;
	margin-top: -150px;
	margin-left: -150px;
	display: none;
	opacity: 0;
	z-index: 5;
	padding: 20px 10px;
}

#modal_form #modal_close {
	width: 21px;
	height: 21px;
	position: absolute;
	top: 10px;
	right: 10px;
	cursor: pointer;
	display: block;
}

#overlay {
	z-index:3;
	position:fixed;
	background-color:#000;
	opacity:0.8;
	-moz-opacity:0.8;
	filter:alpha(opacity=80);
	width:100%; 
	height:100%;
	top:0;
	left:0;
	cursor:pointer;
	display:none;
}

Для modal_form мы задали фиксированную ширину и высоту, а затем отцентрировали положение по центру экрана. Для подложки модального окна (overlay) мы задаем размер по ширине экрана, заливку с прозрачностью, а так же прячем её по умолчанию. Особый момент с z-index, у модального окна он должен быть наибольшим из всех элементов на странице, а у обложки должен быть больше всех элементов, кроме самого модального окна.

Теперь к самому основному, это код на javascript. Для модального окна будет использоваться два основных события, это его открытие — клик по элементу с классом modal, в нашем случае это ссылка, и закрытие модального окна, это клик по обложке (overlay), либо клик на кнопку закрыть, в нашем случае это элемент span с id=modal_close.

$(document).ready(function() {

	$('.modal').click( function(event){
		event.preventDefault();
		$('#overlay').fadeIn(400, // анимируем показ обложки
		 	function(){ // далее показываем мод. окно
				$('#modal_form') 
					.css('display', 'block')
					.animate({opacity: 1, top: '50%'}, 200);
		});
	});

	// закрытие модального окна
	$('#modal_close, #overlay').click( function(){
		$('#modal_form')
			.animate({opacity: 0, top: '45%'}, 200,  // уменьшаем прозрачность
				function(){ // пoсле aнимaции
					$(this).css('display', 'none'); // скрываем окно
					$('#overlay').fadeOut(400); // скрывaем пoдлoжку
				}
			);
	});

});

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

Пример работы модального окна.

Опубликован: 25.12.2016 г.

См. также:

Загрузка файлов на сервер посредством Ajax
Отложенная загрузка изображений Lazy Load
Анимация набора текста на Typed.js
Анимация отсчёта на jquery-spincrement
Mega Dropdown — Меню для мобильной версии
Отслеживаем клик вне элемента на JQuery
Ajax-загрузка записей при скроллинге и нажатии кнопки
Stimed – задаем CSS-стили по времени

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта