Открыть меню    

Простое модальное окно на jQuery

модальное окно 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 или к изображению.

Для тех, кто ищет полностью настраиваемое модальное окно и написана данная статья. Спасибо за чтение.

источник

Комментарии к статье