:-)
  • JS 14.11.2008

    Обзор плагина SimpleModal, его глюков, избавление от глючности, позиционирование по центру экрана и прочие удобства. Помимо этой статьи советую посмотреть на более новую "Модальные окна на jQuery blockUI"

    Начинаем использовать

    Данные плагина:

    Выглядит это дело вот так:

    Вот так выглядит плагин на сайте разработчика

    Для того чтобы плагин заработал его надо подключить:

    <script src="jquery.simplemodal.js" type="text/javascript"></script>

    А так же указать стили для овереля (серой области), контейнера (собственно окно) и кнопки закрыть.

    #modalOverlay { 
      background-color:#000;  /* Тут выбираем цвет затемнения */ 
      cursor:wait;  /* Курсор при наведении на затемненную область */ 
      filter: alpha(opacity=80); /* Интенсивность затемнения */ 
      height: 100%; 
    } 
     
    #modalContainer { 
      height:auto;   /* Для растягивания по высоте */ 
      width:300px; 
      left:50%;  /*в купе с margin-left, которая равна минус половине ширины центруют по горизонтали*/ 
      top:50%;   /*центрует по вертикали, вместе с margin-top, если задать высоту*/ 
      margin-left:-150px; 
      /* margin-top: -70px; */ 
      background-color:#fff; 
      border:3px solid #ccc; 
      padding: 10px; 
    }  
    a.modalCloseImg { 
      background:url(x.png) no-repeat; 
      width:25px;  /* Положение отличается от тех, что в примере. Мне кажется так удобнее */
      height:29px; 
      display:inline; 
      z-index:3200; 
      position:absolute; 
      top:0px; 
      right:0px; 
      cursor:pointer; 
    }

    К сожалению в плагине таятся некоторые глюки. Так например в опере, если контент страницы короче чем сама страница, то при закрытии окна внизу остается серая область. А в IE она иногда и вовсе не закрашивается.

    Вот так это выглядит в Опере

    Вот так это выглядит в Опере

    Однако это решается довольно просто. На страницу необходимо добавить стиль

    #helper { 
      position: absolute; 
      top: 0px; 
      left: 0px; 
      width: 100%; 
      height: 100%; 
      z-index: -10; 
    }

    И в любом месте страницы вставляем:

    <div id="helper"></div>

    Этим мы добиваемся перерисовки браузером нашего документа при закрытии модального окна.

    Делаем удобное оповещение

    Сначала добьемся, чтобы окно было посередине страницы. В своем примере я ограничил ширину 300px, а вот высота может меняться. CSS свойство top:50% действительно опускает окно до середины страницы, однако само модальное окно идет как раз ниже середины. Если бы мы указали высоту в пикселях, например 150px, то могли бы поднять окно над центром с помощью margin-top: -75px. Но окно будет резиновым, а мы для этого воспользуемся еще одним плагином: Dimensions. Данные плагина:

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

    <script type="text/javascript" src="jquery.dimensions.js"></script>

    Подключили. Теперь открываем редактором файл плагина Simplemodal (jquery.simplemodal.js), да-да, будем исправлять плагин. Если наши версии совпадают, то на строке 294 будет функция open. Идем в самый ее конец, сразу после this.bindEvents(); и до закрывающей фигурной скобки ставим

    $('#modalContainer').css('margin-top',-$('#modalContainer').outerHeight()/2-50);

    Я специально отнял от высоты еще 50 пикселей, мне кажется это добавляет удобства. Но вы можете поэкспериментировать. Осталось совсем немного. Добавляем где-нибудь в конце страницы

    <div id="message" style="display: none; text-align: center;">
    <div id="messageText">текст модального окна</div><br /><br />
    <input type='button' value='Ok' class='modalClose' style='height: 30px; width: 60px;'/>
    </div>

    Заметьте, кнопка имеет class='modalClose'. Вы можете создать в диве любой другой объект с этим классом - клик по нему будет закрывать окно. Все, приготовления закончены. Осталось его только использовать. Например так:

    $(document).ready( function() {
        $('#messageText').html('Это наше окошко!');
        $('#message').modal();
    });

    И при загрузке страницы увидим

    Наше модальное окно!

    Наше модальное окно!

    Ура, у нас все получилось.

    Демо: посмотреть

    А другие jQuery примеры можете посмотреть у моего друга Snowcore.

    А еще я писал про:

    1. Пишем плагин для jQuery. Простая валидация форм.
    2. Обзор SimpleModal 1.2.2
    3. Модальное окно на jQuery blockUI

    Tags: ,

  • 17 комментариев

    WP_Modern_Notepad
    • Elena пишет:

      Добрый день! Посмотрела Вашу статью о модальных окнах, скачала. Окна очень удобные, информацию собирют и передают. Все хорошо, только проблема с кодировкой. Если выставляю в индексе charset=windows-1251, то русская кодировка видна только в полях ввода и в ответных сообщениях. На mail все приходит как надо, не кривое. Но первое окно ни как не хочет выводить русскую кодировку ( Введите имя). Если ставлю utf вообще одни ромбики. Не подскажите, что делать?

    • CharnaD пишет:

      Здравствуйте, Елена. Трудно судить не видя кода. Могу предположить, что у вас файлы в разной кодировке. У меня в примере кодировка стоит utf-8. Если вы пишете на php, после чего выводите в модальное окно попробуйте iconv(‘cp1251′, ‘utf-8′, $str);

    • Наташа пишет:

      Очень полезная вещь:)Давно искала,видела такую фишку на других сайтах,а как называется не знала.СПАСИБО ОГРОМНОЕ!

      P.S Классный у вас блог,не только по содержанию,но и по оформлению:)

    • Алексей пишет:

      тоже проблема с кодировкой! вот страница http://abaskov.ru/ccontact/
      код полностью оригинальный с http://www.ericmmartin.com/projects/simplemodal/
      только кодировка страницы поставлена charset=windows-1251.
      и всё равно вместо руских букв – ромбики.
      (кликаем на демо – там вместо ромбиков должно быть написанно *Ваше имя).
      Хэлп плиз!

    • CharnaD пишет:

      во-первых советую ставить UTF-8, во-вторых, проверьте в каком формате у вас сохранен файл (ANSI, UTF8), в-третьих не делаете ли вы случаем iconv при выводе?

    • Алексей пишет:

      Ух ты! CharnaD спасибо за такую быструю реакцию.
      iconv при выводе не делал.
      проблему решил вставкой header(«Content-type: text/html; charset=windows-1251″);

    • CharnaD пишет:

      Всегда пожалуйста. Я за блогом слежу, если что – спрашивайте.

    • Сергей пишет:

      Я использую для вывода модального окна другую библиотеку, ModalBox. На сайте *****.net, в разделе «Мои пакеты», выводится такое окно при нажатии кнопок «Купить» или «Продлить». Вопрос: где обычно задается размещение модального окна (мне нужно, чтобы оно появлялось по центру, а не вылазило сверху). Это css или же какой параметр?

    • CharnaD пишет:

      В simplemodal встроена центровка по вертикали по-моему. Можно и через css, можно и жестко задать

    • rails developer пишет:

      А чем н еподходят стандартные окна которы епредланают исопльзовать в jQuery
      http://jqueryui.com/demos/dialog/

    • CharnaD пишет:

      Они более сложные) А это «простое» окно)

    • Predator пишет:

      Добрый вечер всем. У кого есть исходник HTML кода. Ато я что то не пойму почему приписанный скрипт не работает. Толи я что то не верно пишу код, то ли скрипт не рабочий.. Большое спасибо за помощь…

    • Константин пишет:

      На jqModal сделать имхо проще. Тем более библиотечка пуру килобайт занимает.

    • CharnaD пишет:

      Спасибо, посмотрю.

    • Василий пишет:

      хотелось бы увидеть тут исходники приложения

    • КОля пишет:

      Скажите пожалуйста у меня есть выпадающее меню, я нажимаю на заголовок h2 b у меня внизу выпадает список, мне надо чтобы он закрывался когда я кликну на любом месте страницы.
      код jquery у меня такой

      jQuery(document).ready(function($) {
      jQuery(“li.widget_archive h2″).click(function () {
      jQuery(“li.widget_archive ul”).slideToggle(“normal”);
      });
      jQuery(“li.widget_categories h2″).click(function () {
      jQuery(“li.widget_categories ul”).slideToggle(“normal”);
      });
      jQuery(“li.widget_links h2″).click(function () {
      jQuery(“li.widget_links ul”).slideToggle(“normal”);
      });
      });

    Trackbacks

    1. Блог web-мастера » Архив сайта » Модальные окна: Simple Modal для jQuery. Часть 2

    Оставить комментарий

    Внимание: Комментарии проходят премодерацию. Не надо посылать их несколько раз.

    Это не спам.