Галерея jQuery lightBox
Дата публикации: 02.11.2010
Сегодня речь пойдет о jQuery lightBox. Этот плагин часто и успешно применяется во многих проектах для решения задачи вывода на экран увеличенного изображения в фотогалерее.
Автор данного плагина Leandro Vieira Pinho. Создал он его на основе аналогичного плагина Lightbox (автор Lokesh Dhakar), использующего библиотеку prototype.
По традиции сразу же пример использования.
Проверено в:
- IE 6-8
- Firefox 3
- Opera 9.5-10
- Safari 3
- Chrome 7
Что качать?
- Библиотеку jquery качаем или загружаем с Google;
- Cам плагин jquery.lightbox-0.5.js (20.07 Kb) или его запакованную версию jquery.lightbox-0.5.pack.js (6.27 Kb);
- Сопроводительные материалы (6.91 Kb) — CSS и картинки.
Быстрый старт
Подключаем CSS и библиотеки:
<link href="css/jquery.lightbox-0.5.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script> <script type="text/javascript" src="js/jquery.lightbox-0.5.pack.js"></script>
HTML предельно прост и логичен. Фото (img), обернутое ссылкой на увеличенную версию этого же фото:
<a href="pic/pic1.jpg"><img src="pic/pic1-thumb.jpg" height="113px" width="150px" alt=""/></a>
Инициализируем галерею:
<script type="text/javascript">
jQuery(function(){
jQuery("a").lightBox();
});
</script>
Конечно, в боевых условиях вешать галерею на все ссылки не стоит. Неплохим решением будет использовать класс или id для родителя картинок, например, так: jQuery(«#gallery a»).lightBox().
А теперь подробнее
Как обычно, плагин можно настроить с помощью параметров функции lightBox():
Параметры lightBox()
| Название параметра | Описание | значение по умолчанию |
|---|---|---|
| overlayBgColor | цвет фона | #000 |
| overlayOpacity | прозрачность | 0.8 |
| imageLoading | адрес картинки с gif-анимацией загрузки | images/lightbox-ico-loading.gif |
| imageBtnClose | адрес картинки с кнопкой закрытия | images/lightbox-btn-close.gif |
| imageBtnPrev | адрес картинки с кнопкой перехода к предыдущему изображению | images/lightbox-btn-close.gif |
| imageBtnNext | адрес картинки с кнопкой перехода к следующему изображению | images/lightbox-btn-close.gif |
| containerBorderSize | padding контейнера с изображением, заданный в пикселях (использовать осторожно — иногда бажит) | 10 |
| containerResizeSpeed | длительность анимации при изменении размеров контейнера с изображением в миллисекундах | 400 |
| fixedNavigation | флаг, показывает, будут ли навигационные стрелки видны постоянно или только появляться при наведении | false |
| txtImage | в подписи к изображению заменяем слово «Image» на необходимое значение (например, подпись «Image 2 of 8» можно заменить на «Изображение 2 of 8») | Image |
| txtOf | в подписи к изображению заменяем слово «of» на необходимое значение (например, подпись «Image 2 of 8» можно заменить на «Image 2 из 8») | of |
| keyToClose | клавиша закрытия | c (close) |
| keyToPrev | клавиша перехода к предыдущему изображению | p (previous) |
| keyToNext | клавиша перехода к следующему изображению | n (next) |
Пример инициализации плагина с использованием параметров:
<script type="text/javascript">
jQuery(function(){
jQuery(".gallery").lightBox({
overlayBgColor: '#FFF',
overlayOpacity: 0.6,
imageLoading: 'img/loading.gif',
imageBtnClose: 'img/close.gif',
imageBtnPrev: 'img/prev.gif',
imageBtnNext: 'img/next.gif',
containerResizeSpeed: 350,
txtImage: 'Изображение',
txtOf: 'из'
});
});
</script>
Нестандартное оформление
Как настраивать плагин с помощью параметров инициализации, думаю теперь понятно. Давай коснемся немного более сложных настроек.
Меняем картинки
Итак, пути к новым картинкам заданы с помощью imageLoading, imageBtnClose, imageBtnPrev и imageBtnNext. Но что, если сами картинки отличаются по размеру? Не проблема. Редактируем jquery.lightbox-0.5.css:
#lightbox-secNav-btnClose { /* стили отвечают за кнопку закрыть */
width: 66px; /* можно смело поменять ширину */
float: right; /* ... и позиционирование */
padding-bottom: 0.7em;
}
Что касается кнопок «следующая», «предыдущая», то в большинстве случаев менять стили не нужно. Так как сама кнопка существенно больше своей фоновой картинки и занимает почти половину фотографии. Это достаточно удобно — не нужно щелкать именно по надписи. Достаточно клацнуть, например, «куда-то слева» и получим переход на предыдущую фоту. Если все-таки нужно изменить кликабильную область — редактируем правила для #lightbox-nav-btnPrev и #lightbox-nav-btnNext.
Подписи под картинками
При желании, можно задать индивидуальные подписи каждой увеличенной картинке. В этом вопросе плагин тоже оказался на высоте. Подписи задаются очень простым и логичным способом — атрибутом title для тега a:
<a href="pic/pic1.jpg" title="Описание рисунка"><img src="pic/pic1-thumb.jpg" height="113px" width="150px" alt=""/></a>
Фон для большого фото
Параметр overlayBgColor задает цвет фона для заливки страницы. А если нужно поменять фон у большого фото, опять придется править стили.
#lightbox-container-image-box{
background-color: #fff; /* это фон непосредственно под картинкой */
}
#lightbox-container-image-data-box {
background-color: #fff; /* а это фон под надписями */
}
Убираем ненужные элементы
А если мне нужно только увеличенное фото вообще без панельки с подписями? Нет проблем! Идем в стили и добавляем display:none:
#lightbox-container-image-data { /* это правило отвечает за панель с текстом */
padding: 0 10px; /* можно настроить отступы... */
color: #666; /* ... цвет шрифта (понятно, что не только цвет - смело добавляй любые необходимые стили) */
display:none; /* А этой строки изначально нет. Добавляем ее, если панель не нужна. */
}
Немного труднее убрать только надпись «Изображение X из N». Ее правило имеет селектор #lightbox-image-details-currentNumber. Просто display:none; тут не прокатит, т.к. скрипт переставит его на display: block. Ничего страшного! Просто перебиваем его с помощью !important:
#lightbox-image-details-currentNumber {
display:none!important;
}
Демо-пример — та же галерея, но с более тонкой настройкой.
Проверено в:
- IE 6-8
- Firefox 3
- Opera 9.5-10
- Safari 3
- Chrome 7
Сюрприз от IE6 (в quirks mode)
Как всегда ложка дегтя от старого осла. В IE6 в режиме обратной совместимости замечен баг — панель с текстом несколько уже, чем панель с рисунком.

К сожалению, стилями это поправить не выйдет — за ширину отвечает скрипт. Соответственно, если нужно избавляться от бага (а это нужно не всегда — во многих сайтах панель с текстом в таких галереях просто скрывают), то и править нужно скрипты. Один из вариантов, найти в тексте плагина строчку:
$('#lightbox-container-image-data-box').css({ width: intImageWidth });
…и перед ней вставить насильное увеличение ширины для осла. Что-то типа такого:
if ($.browser.msie && $.browser.version == 6) intImageWidth+=settings.containerBorderSize*2;
$('#lightbox-container-image-data-box').css({ width: intImageWidth });
Само-собой такое вмешательство уже не позволит использовать запакованную версию плагина (или вынудит перепаковать).
Плюсы:
- адекватно работает во всех популярных браузерах;
- не требует создания нелогичных HTML конструкций, дополнительных классов или атрибутов;
- простая в настройке и привязке.
