Простое модальное окно на jQuery
В этой статье я покажу, как создать простое модальной окно, используя jQuery. Если вы не знаете, что такое модальной окно, перейдите по кнопке demo. Там вы сможете в полной мере узнать, что такое модальное окно.
Давайте приступим к созданию модального окна, которое будет отображать содержимое блока div #id
.
Моя цель:
- Иметь возможность найти в html-документе тег a с атрибутом name равным "modal" , и по клику по данному тегу a, отображать контент div, id которого идентичен атрибуту href ссылки.
- Создать маску, которая будет заполнять весь экран.
- Модальное окно должно быстро и легко модифицироваться.
HTML
<!-- #dialog это id блока DIV определенного в коде ниже -->
<a href="#dialog" name="modal">Simple Modal Window</a>
<div id="boxes">
<!-- ваше модальное окно -->
<div id="dialog" class="window">
<b>Тестируем модальное окно</b> |
<!-- кнопка для закрытия модального окно, определена
через класс close -->
<a href="#" class="close">Close it</a>
</div>
<!-- div#mask, заполняет все пространство браузера
(лучше один раз увидеть)-->
<div id="mask"></div>
</div>
CSS
/* Z-index #mask должен быть ниже, чем у #boxes .window */
#mask {
position:absolute;
z-index:9000;
background-color:#000;
display:none;
}
#boxes .window {
position:fixed;
width:440px;
height:200px;
display:none;
z-index:9999;
padding:20px;
}
/* Стилизуем наше модальное окно, как угодно */
#boxes #dialog {
width:375px;
height:203px;
}
jQuery
$(document).ready(function() {
//отбираем все теги a с name modal
$('a[name=modal]').click(function(e) {
//Отменяем поведение ссылки (по умолчанию)
e.preventDefault();
//Получаем href ссылки
var id = $(this).attr('href');
//Получаем высоту и щирину окна просмотра
var maskHeight = $(document).height();
var maskWidth = $(window).width();
//Устанавливаем ширину и высоту маски равной (см. выше)
$('#mask').css({'width':maskWidth,'height':maskHeight});
//Анимация
$('#mask').fadeIn(1000);
$('#mask').fadeTo("slow",0.8);
//Получаем ширину и высоту window
var winH = $(window).height();
var winW = $(window).width();
//Для центрирования модал. окна
$(id).css('top', winH/2-$(id).height()/2);
$(id).css('left', winW/2-$(id).width()/2);
// Анимация
$(id).fadeIn(2000);
});
//закрываем модал. окно при клике по .close
$('.window .close').click(function (e) {
//Отменяем обычное поведение ссылки
e.preventDefault();
$('#mask, .window').hide();
});
//если клтк по маске, также скрываем модал. окно
$('#mask').click(function () {
$(this).hide();
$('.window').hide();
});
});
Все что приведено выше крайне прямолинейно и легко для понимания.
Запустить модальное окно через javascript
Концепция весьма проста. Я обернул скрипт для модального окна функцией, и этим вы получаете возможность вызвать модальное окно при помощи обыкновенной именованной функции javascript.
Да, вы имеете возможность загрузить модальное окно сразу после загрузки страницы: а стоит ли ставить такие всеми ненавистные всплывающие окна?
jQuery
$(document).ready(function () {
//id того DIV, который вы хотите отобразить в модальном окне
launchWindow(id);
});
И, если вы желаете, чтобы модальное окно закрывалось по нажатия какой-либо клавиши, достаточно добавить следующую функцию:
jQuery
$(document).keyup(function(e) {
if(e.keyCode == 13) {
$('#mask').hide();
$('.window').hide();
}
});
Используем куки при первой загрузке
Вам потребуется две функции (createCookie и readCookie) из статьи об куках (ссылка).
jQuery
$(document).ready(function() {
//if the cookie hasLaunch is not set, then show the modal window
if (!readCookie('hasLaunch')) {
//launch it
launchWindow('#dialog1');
//then set the cookie, so next time the modal won't be displaying again.
createCookie('hasLaunch', 1, 365);
}
});
Пересчитываем позиционирование модального окна и маски при изменении размеров окна просмотра (window)
Не знаю, как я упустил это, ниже приведен код, который позиционирует модальное окно и рассчитывает размер маски, если вы изменили размеры окна браузера.
jQuery
$(document).ready(function () {
$(window).resize(function () {
var box = $('#boxes .window');
//Получаем высоту и щирину окна просмотра
var maskHeight = $(document).height();
var maskWidth = $(window).width();
//Set height and width to mask to fill up the whole screen
$('#mask').css({'width':maskWidth,'height':maskHeight});
//высота и ширина window
var winH = $(window).height();
var winW = $(window).width();
//Set the popup window to center
box.css('top', winH/2 - box.height()/2);
box.css('left', winW/2 - box.width()/2);
});
});
Заключение
Да, это поможет вам сделать простое модальное окно. В этой статье я показал концепцию того, как отобразить содержимое блока внутри модального окна. Однако, вы можете пойти дальше и привязать ссылку к iFrame или к изображению.
Для тех, кто ищет полностью настраиваемое модальное окно и написана данная статья. Спасибо за чтение.
источник
Комментарии к статье