Давно ничего не писал - как-то не о чем… Праздники, работа, учеба… Единственное, что реально интересно из этого списка - это работа, но… к сожалению, как раз она и “способствует” отсутствию статей в этом блоге - её много и на блог времени просто не остается… А написать, к счастью, есть о чем. :)
Сегодня речь пойдет о так называемых dialog widget’ах (периодически, слышу, что их также называют js-popup’ами). Недавно понадобилось реализовать такой функционал в моём “рабочем” проекте и стал вопрос об использовании существующих решений.
В проекте я использую jQuery и, соответственно, выбирал системку, которая базировалась бы на нем. Всё началось с Thickbox’а, который я довольно долгое время и использовал, но… Кое-что мне в нем не нравилось изначально:
- Минимум настроек
- Отличие от большинства плагинов jQuery
- Отсутствие развития (последняя версия вышла в августе 2007-го года и зависела еще от jQuery 1.1x, хотя и с 1.2 тоже работала нормально)
… в итоге эти недостатки привели ко вполне логичному концу - я не мог реализовать 2 разных “диалога” на одной странице не “вторгаясь” в сам код Thickbox’а, причем застрял на мелочи - удиалогов должны были различаться бэкграунды - у одного он должен был быть полностью залит определенным цветом, а второй должен был быть полупрозрачным. Причем в первом случае сделать фон непрозрачным мне пришлось через CSS, хотя гораздо логичнее было бы предоставить эту возможность самой функции создания диалога.
В общем, после недолгих поисков на свет был извлечен молодой, но очень быстро развивающийся
проект “окошек” на jQuery, о котором я сегодня и хочу рассказать - это nyroModal. Проекту еще нет и месяца, но основная функциональность там уже реализована (а как по мне - так больше и не нужно), и что самое главное - им очень удобно пользоваться.
Подробное описание (а также демонтрацию возможностей nyroModal) можно посмотреть на странице самого проекта, а я здесь приведу лишь несколько примеров использования.
Самый простой способ, при котором даже не нужно лезть в JavaScript - это присвоение ссылкам класса nyroModal:
<a href="demo.html" class="nyroModal">Ajax</a>
Эта ссылка откроет вам файл demo.html в “окошке”.
<a href="demo.html#demo" class="nyroModal">Ajax</a>
Эта - сделает почти то же самое, только в окошке будет только инфа из блока с id == “test” из файла demo.html.
<a href="#demo" class="nyroModal">No Ajax!</a>
А здесь у нас в окно попадет содержимое блока с id == “test” из текущей страницы.
Если же нужны какие-то дополнительные параметры (значения или callback-функции), то здесь уже без “ручного” JavaScript’а не обойтись:
<a href="#demo" id="no-ajax">No Ajax!</a>
<script type="text/javascript">
$('#no-ajax').nyroModal({
bgColor: '#FFFFFF',
showBackground: function(elts, settings, callback) {
// elts.bg.css({opacity:0}).fadeTo(500, 0.75, callback);
callback();
},
hideBackground: function(elts, settings, callback) {
// elts.bg.fadeOut(300, callback);
callback();
}
})
</script>
Таким образом мы заменим цвет фона на белый + уберем прозрачность и анимацию при появлении/исчезновении фона.
На этом, наверное, будем прощаться. Если остались вопросы - обращайтесь. :)






May 7th, 2008 at 14:39
В Opera кнопочка закрытия окна едет.
May 8th, 2008 at 21:32
А у меня всё ок… :)
June 2nd, 2008 at 12:01
А у меня проблемы в IE7 - при вызове окна появляются скроллбар, постоянно меняющий свой размер. Складывается впечатление, что проблема с Div 100% который идет в фон.
June 2nd, 2008 at 13:59
Хмм. Таких проблем не замечал. Были другие - с IE6 и фиксированным body, но это уже стандарт, + нежеланием нормально работать с указанными аттрибутами css, вылечилось исправлением одной строки.
August 14th, 2008 at 20:57
А я что-то немогу разобраться с callback.
Как прописать чтобы при появление модального окна выполнялась какая-то JS функция? а потом после закрытия другая?
(п.с. использую простейшую форму с добавлением ссылке класса nyroModal)
August 15th, 2008 at 00:46
October 2nd, 2008 at 17:35
Столкнулся со странность nyromodal’a в том, что он как-то странно ресайзит изображения. Причем под IE6 нормально, а вот под FF 3.0.3 появляются “полосы прокрутки”.
Пример можно посмотреть здесь http://srv15577.ht-test.ru/nyro_resize.jpg (160kb)
October 3rd, 2008 at 14:15
Можно в исходниках покопаться. :) Так сразу не скажу - у меня таких проблем не было.
October 4th, 2008 at 01:26
А что мешает задать ‘overflow: hidden’?
October 4th, 2008 at 01:39
И получить не всё изображение, а только его кусок?
October 4th, 2008 at 02:07
Странно, щас решил протестировать на другом проекте - так там нет таких проблем с ресайзом картинок в FF.
Видимо что-то “засело” в css.
Вообщем буду разбираться.
October 6th, 2008 at 09:21
Попробовал nyroModal - удобная штука, вот только у меня вылез такой глюк - открываю в модальном окне форму, заполняю ее, а данные в базу пишутся в UTF-8. Кроме как писать обработчик для переконвертации есть какое другое решение?
October 9th, 2008 at 05:59
А сайт в какой кодировке?
October 9th, 2008 at 09:27
win1251.
October 9th, 2008 at 18:14
Странно, у меня как раз отправляется всё нормально. А вот для получения данных в CP1251 нужно делать header(’Content-Type: text/html;charset=windows-1251′).
November 19th, 2008 at 13:15
Ошибка: $(”#cb”).nyroModal is not a function.
:(
Версии: nyroModal 1.3. jQuery 1.2.6.
Кто-нибудь может показать действующий пример nyroModal подключенного не через класс, а прямым вызовом? Желательно с callback функциями, например Alert(’test’);