jsImageBox -- легкий аналог lightbox без jQuery
Делал сегодня фотогалерею для одного из своих сайтов, и потребовался скрипт, который показывал бы фотографию во всплывающей рамке с затемнением фона (так называемый lightbox), причем так, чтобы можно было просматривать сразу целую серию фотографий, переходя от одной к другой. Оригинальный lightbox не подходил именно по причине отсутствия поддержки серий, а его вторая версия использует jQuery. Для того сайта мне покзалось это слишком тяжелым решением, и я стал искать легкий скрипт, не требующий больших библиотек. И такое решение было найдено: jsImageBox, в сжатом виде занимающий всего 9 Kb.
Использование очень простое: подключаем файл с помощью тега script, как обычно, для каждой фотографии в серии задаем rel="rr" и событие onclick="return jsiBoxOpen(this)", а также аттрибут title для ссылки, если хотим выводить не только фотографию, но и ее название. Важный момент: если в верстке сайта используются блоки с относительным позиционированием (position: relative), тег script нужно помещать в head, или сразу после открывающего тега body, иначе всплывающая рамка может оказаться совсем не там, где вы ее ожидаете.
В целом скрипт понравился мне всем, кроме юзабилити: пользование социальным сетями приучило к тому, что если щелкнуть по самой фотографии, происходит переход к следующей, здесь же при щелчке не происходило ничего, а для перехода приходилось целиться в маленькую стрелочку наверху. То же самое и с закрытием: привычное закрытие по щелчку вне рамки не работало. Решил доработать самостоятельно. Это оказалось просто: в функции инициализации jsiBoxInit добавил обработчик, вызывающий функцию перехода к следующему сообщению, если оно не последнее или функцию закрытия в противном случае:
jsiBox.mainImg.onclick=function() {
if (jsiBox.currentImgIndex+1 < jsiBox.linkNodesArray.length) jsiBoxNext();
else jsiBoxClose();
}
jsiBox.wrapNode.onclick = jsiBoxClose;Вставлять этот код следует после
jsiBox.mainImg = document.getElementById('jsiBoxMainImage');Также поправил цвет фона заливки в настройках в начале файла:
overlayColor : '#000',
Общее впечатление осталось такое: хорошее решение там, где требуется легкость и простота, но автору есть куда его совершенствовать. В частности, улучшить юзабилити, вынести в настройки скорость разворачивания рамки и сделать добавление HTML-кода не через document.write, а через appendChild к тегу body.
Может вы подскажете как решить еще одну важную проблему? Представим ситуацию, есть страница, на ней 20 строк текста, под ними миниатюра фотографии. Т.е. высота страницы умещается на одном экране, даже меньше. Если нажать на миниатюру, которая находится почти у футера, то она расширится вниз, при этом серое затенение будет ровно до конца страницы, а так как картинка большой высоты, и разворачивается вниз дальше чем футер, то половина изображения получается без затенения, т.е. на белом фоне. Надеюсь понятно объяснил.