css, html, php, javascript, jQuery, ajax … – решения, примеры, рецепты
27 Ноя
Почему решил написать этот обзор? Во-первых, предыдущая статья про LightBox безнадежно устарела. Во-вторых, мне LightBox нравится. Правда было время, когда разработчики плагина убирали оттуда поддержку ie6, но потом, видимо одумавшись, вернули ее. В общем, всем хорош плагин LightBox, но вот заточен он только под фото. А если приперло вывести видео с YouTube или вообще какой-нибудь контент в iframe? Да, да, знаю, есть галерея FancyBox, сам пользуюсь, но LightBox все равно больше нравится. Поэтому и было решено покопаться среди многочисленных клонов галереи LightBox.
Начинаем, так сказать, с первоисточника и сразу же смотрим демо, замечая при этом нюансы, чтобы потом сравнить с другими галереями.
Ясно, что для использования плагина нужно подключить к веб-странице файл библиотеки jquery-1.3.2.js, файл плагина jquery.lightbox.js и файл стилевого оформления плагина jquery.lightbox.css. Не забудьте, что в папке images полученного архива, хранятся изображения элементов управления, необходимые для работы плагина.
<link type="text/css" href="js/jquery.lightbox.css" rel="stylesheet" /> <script src="js/jquery-1.3.2.js" type="text/javascript"></script> <script src="js/jquery.lightbox.js" type="text/javascript"></script>
Теперь о том, как собственно организовать галерею. Естественно понадобятся изображения из которых будет состоять галерея – миниатюры и соответствующие им полноразмерные изображения. Общая конструкция такая:
<a rel="lightbox" href="images/large.jpg" title="Какой-то текст"> <img src="images/small.jpg" /> </a>
Картинка-миниатюра заключена в тэг а, атрибут href которого указывает на соответствующее полноразмерное изображение. В атрибуте rel содержится ключевое слово – lightbox. Такого кода достаточно, чтобы при клике по миниатюре в отдельном слое открылось большое (именно большое, потому что по умолчанию оно масштабируется, если не помещается в области просмотра) изображение. Текст, содержащийся в атрибуте title тэга a станет комментарием к открывшемуся изображению.
В рассмотренном примере функциональность плагина применена к отдельному изображению, а нам нужно сделать тоже самое для группы. Смотрим следующую разметку:
<a rel="lightbox-tour" href="images/large.jpg" title="Какой-то текст"> <img src="images/small.jpg" /> </a>
К ключевому слову lightbox просто добавили произвольный суффикс, в данном случае -tour. Добавляйте какое-то количество таких конструкций в свой код, назначайте им одинаковый суффикс и плагин автоматически объединит изображения в группы. Естественно, в этом случае, кроме комментариев, которые также будут создаваться из содержимого атрибута title, появятся элементы управления для перемещения по галерее.
Если по каким-то причинам Вам нежелательно использовать атрибут rel, можно обойтись и без него. Создать галерею можно используя простой jQuery-код.
$(function(){
$('a.gallery').lightbox();
});
Если этот код использовать с приведенной ниже разметкой, то все элементы а, имеющие класс gallery, получат функциональность плагина, и атрибут rel тут не потребуется.
<a class="gallery" href="images/large.jpg" title="Какой-то текст"> <img src="images/small.jpg" /> </a>
Плагин LightBox имеет некоторое количество пользовательских настроек, с помощью которых можно переопределить поведение по умолчанию. Обычно jQuery-плагины принимают такие настройки в виде объекта, передаваемого методу в качестве аргумента. Здесь дело обстоит несколько иначе – для настройки вызывается отдельный метод. Ниже приведен пример кода, который создаст галерею из изображений, заключенных в тэг а с классом gallery и передаст плагину некоторые настройки.
$(function(){
$("a.gallery").lightbox();
$.Lightbox.construct({
text: {
image: "Фото",
of: "из"
},
download_link: false,
opacity: 0.5,
show_linkback: false
});
});
Кстати, помимо использования $.Lightbox.construct(); есть другая возможность передать настройки – в строке запроса. Примерно так:
<script src="js/jquery.lightbox.js?show_linkback=false&text.image=Фото&text.of=из" type="text/javascript"></script>
ПРИМЕЧАНИЕ: В плагине подразумевается поддержка IE6 и она включена по умолчанию. Для IE6 передача параметров возможна только в строке запроса (остальные браузеры тоже понимают такой способ). Если попытаться использовать $.Lightbox.construct(); то в IE плагин перестает работать. По крайней мере у меня не получилось.
Ну а теперь немного о возможных опциях, которые можно использовать для настройки LightBox.
show_linkback – по умолчанию true, показывает ссылку на страницу плагина на сайте plugins.jquery.com в правом верхнем углу. Передаем false, чтобы скрыть ссылку.
show_helper_text – по умолчанию true, показывает текст (Click to close) в правом верхнем углу и всплывающую подсказку (Hover to interact) при наведении указателя мыши на этот текст. Используем false, чтобы убрать текст (и подсказку естественно тоже).
show_info – по умолчанию ‘auto’, показывает информацию (текст, содержащийся в атрибуте title) под открывшимся изображением только в том случае, если указатель мыши находится над изображением. Чтобы показывать эту информацию независимо от положения указателя мыши используем значение true.
show_extended_info – по умолчанию ‘auto’, показывает дополнительную информацию (Image 1 of nn) при указатель мыши прошел над область, где показывается основная информация (текст, содержащийся в атрибуте title). Чтобы показывать эту информацию независимо от положения указателя мыши используем значение true.
download_link – по умолчанию true, предоставляет возможность открыть полноразмерное изображение в новом окне (вкладке) браузера, воспользовавшись ссылкой, которой является текст комментария к изображению (текст, содержащийся в атрибуте title). Чтобы запретить использование этой возможности, надо передать false.
auto_resize – по умолчанию true, автоматически изменяет размеры картинки, если она слишком большая и не вписывается в область просмотра. Необходимо передать false, чтобы отменить это поведение.
ie6_support – по умолчанию true, включена поддержка IE6. Чтобы отключить ее, надо передать false.
ie6_upgrade – по умолчанию true, показывает сообщение, призывающее пользователей IE6 проапгрейдить свое ПО (у меня почему-то не сработало).
speed – число, определяющее количество миллисекунд, которые отводятся на переход между двумя изображениями. По умолчанию установлено 400.
baseurl – по умолчанию null, но можно указать url для автоматического подключения файлов, которые использует скрипт (стили, картинки).
files – объект, в свойствах которого можно передать местоположение требуемых файлов (используется, если названия файлов менялись). Можно использовать следующие свойства: js.lightbox, js.colorBlend, css.lightbox, images.prev, images.next, images.blank, images.loading.
text – объект, в свойствах которого можно передать текст частей интерфейса. Используется для перевода на нужный язык. Можно использовать следующие свойства: image, of, close, closeInfo, download, help.close, help.interact, about.text, about.title, about.link.
keys – объект, в свойствах которого можно определить «горячие клавиши» для перемещения по галерее вперед и назад, а также для закрытия галереи. Используются свойства close, prev, next.
opacity – прозрачность слоя, который появляется при просмотре галереи между большими изображениями и основным содержимым страницы. Значение может изменяться от 0 до 1. По умолчанию используется значение 0.9.
padding – по умолчанию null, но можно указать число, которое будет определять отступы вокруг просматриваемого изображения.
rel – по умолчанию ‘lightbox’, определяет значение в атрибуте rel тега а (см. пример html-разметки), исходя из которого плагин автоматически формирует галереи. Можно передать строку, в которой определить любое удобное значение.
auto_relify – по умолчанию true, плагин должен автоматически искать и формировать галереи. Чтобы отменить такое поведение следует передать значение false.
Выводы: Плюсы – неплохое оформление, большинство опций действительно полезны. Минусы – сложности с настройкой плагина с учетом поддержки IE6, не все опции удается использовать так, как заявлено разработчиком, не работает ни с каким другим контентом, кроме фото. Имхо, минусов больше, причем перечислены еще не все.
По сравнению с обычным LightBox не имеет таких заморочек с настройкой под все основные браузеры, но точно также работает только с фото. Однако имеет возможность автоматической смены изображений – слайдшоу.
Смотрим демо, замечаем отличия от LightBox…
Подключается просто:
<link type="text/css" href="css/nf.lightbox.css" rel="stylesheet" /> <script src="js/jquery-1.3.2.min.js" type="text/javascript"></script> <script src="js/NFLightBox.js" type="text/javascript"></script>
В разделе HEAD надо указать пути к файлу стилевого оформления, файлу библиотеки jQuery и файлу плагина. Требования к разметке точно такие же, как и у LightBox.
<a href="images/large.jpg" title="Какой-то текст"> <img src="images/small.jpg" /> </a>
Создается галерея с помощью следующего jQuery-кода:
$('a').lightBox({
overlayBgColor: '#363',
txtImage: 'Фото',
txtOf: 'из',
txtPrev: ' Назад',
txtNext: ' Вперед',
keyToClose: 'q',
keyToPrev: 'z',
keyToNext: 'c'
});
Этот плагин тоже имеет приличное количество настроек. Использование некоторых показано в приведенном выше коде. Довольно полезная опция overlayBgColor – позволяет менять цвет промежуточного слоя между просматриваемым изображением и содержимым веб-страницы. В LightBox для этого пришлось бы править css-файл.
Чуть подробнее про опции, которые можно использовать для настройки.
overlayBgColor – по умолчанию #000 (черный), используется для задания цвета промежуточного слоя.
overlayOpacity – по умолчанию 0.8, задает прозрачность промежуточного слоя. Можно использовать значения от 0 до 1.
imageLoading, imageBtnPrev, imageBtnNext, imageBtnClose, imageBlank, imageBtnBottomPrev, imageBtnBottomNext, imageBtnPlay, imageBtnStop – во всех этих опциях можно передать строку, содержащую путь к файлу изображения соответствующего элемента управления.
containerBorderSize – по умолчанию 10, определяет ширину рамки вокруг просматриваемого изображения.
containerResizeSpeed – по умолчанию 500, время в миллисекундах, за которое будет изменяться размеры области просмотра изображения при переходе от одного изображения к другому.
txtImage, txtOf, txtPrev, txtNext – вполне понятные опции. Например задав значения txtImage: ‘Фото’ и txtOf:’из’ Вы уже будете видеть не Image 1 of 8, а Фото 1 из 8.
keyToClose, keyToPrev, keyToNext – с помощью этих опций можно задать «горячие» клавиши. Например keyToClose:’q’ – при нажатии клавиши ‘q’ просмотр будет прекращен.
slideShowTimer – по умолчанию 5000, т.е.если Вы запустите слайдшоу, то изображения будут меняться каждые 5 секунд.
Выводы: Плюсы – неплохое оформление, большинство опций действительно полезны, есть автоматическая смена фото при просмотре, нет сложностей с настройкой. Минусы – png-файлы для элементов управления не очень здорово выглядят в IE6 (и к сожалению jquery.pngfix.js тут не поможет), не работает ни с каким другим контентом, кроме фото. Имхо, лучше, чем стандартный LightBox, но все же не то, что хочется.
Так и хочется написать – PrettyPhoto мой выбор! Во-первых, этот плагин позволяет работать не только с фото. В области просмотра можно выводить видео с YouTube, ролики в формате .mov (Apple QuickTime), содержимое во flash-формате и наконец вообще любой контент через iframe. Во-вторых, этот плагин имеет свой API, чего нет в рассмотренных ранее плагинах.
Смотрим демо, отмечаем отличия от других галерей и начинаем разговор про PrettyPhoto.
Сначала необходимо подключить к веб-страницы файл библиотеки jquery-1.3.2.js, файл плагина jquery.prettyPhoto.js и файл стилевого оформления плагина prettyPhoto.css.
<link type="text/css" href="css/prettyPhoto.css" rel="stylesheet" /> <script src="js/jquery-1.3.2.min.js" type="text/javascript"></script> <script src="js/jquery.prettyPhoto.js" type="text/javascript"></script>
Организация галереи (или галерей) почти не отличается от того, как это делается в LightBox.
<a rel="prettyPhoto[gallery_1]" href="max/1.jpg" title="Фото номер 1"> <img src="min/1.jpg" alt="Фото номер 1" /> </a>
Картинка-миниатюра заключена в тэг а, атрибут href которого указывает на соответствующее полноразмерное изображение. В атрибуте rel содержится ключевое слово – prettyPhoto. Чтобы создать несколько различных галерей на обной веб-странице, в атрибуте rel следует указать например – prettyPhoto[gallery_easy] для условной первой галереи, prettyPhoto[other_gallery] – для другой и так далее…
С помощью jQuery-кода создаем галерею. Используем настройки, установленные по умолчанию.
$(function(){
$("a[rel^='prettyPhoto']").prettyPhoto();
});
Опции, которые можно использовать для настройки prettyPhoto:
animationSpeed – по умолчанию ‘normal’. Другие возможные значения – ‘fast’ и ’slow’. Скорость анимации изменения размеров окна просмотра при переходе от одного изображения к другому.
padding – по умолчанию 40. Число, опредяляющее отступы вокруг изображения.
opacity – по умолчанию 0.80, прозрачность промежуточного слоя. Изменяется от 0 до 1.
showTitle – по умолчанию true. Заголовок (содержимое атрибута title тэга а), который отображается в левом верхнем углу над областью просмотра. Чтобы отключить надо использовать значение false.
allowresize – по умолчанию true. По умолчанию полноразмерное изображение масштабируется, если ему не хватает места для отображения в полном размере. Можно отменить это поведение, передав false.
counter_separator_label – по умолчанию ‘/’. Разделитель в счетчика изображений галереи.
theme – по умолчанию ‘light_rounded’. Да! Плагин поддерживает несколько тем оформления. Кроме light_rounded возможны также dark_rounded, light_square, dark_square. Вот только для IE6 принудительно используется тема light_square (светлый фон и нескругленные углы).
hideflash – по умолчанию false. Скрывает все flash-объекты на странице при просмотре галереи, чтобы они не отображались поверх. Если этого не требуется, можно установить значение true.
modal – по умолчанию false. Если установить true, будет использоваться модальный режим, т.е. завершить просмотр галереи можно будет только нажатием на картинку ‘close’.
Еще две полезные опции, в которых можно определить callback-функции, вызываемые при наступлении определенного события.
changepicturecallback – функция, определенная в этой опции, будет вызываться каждый раз при смене изображения галереи.
callback – функция, определенная в этой опции, будет вызываться при завершении просмотра.
Плюс ко всем этим полезным опциям, плагин предоставляет четыре метода.
$.prettyPhoto.open(‘path/to/image’,'Title’,'Description’) – метод позволяет открыть нужную галерею. Пример будет чуть позже.
$.prettyPhoto.changePage(‘next’) – с помощью этого метода можно осуществить переход к следующему изображению галереи.
$.prettyPhoto.changePage(‘previous’) – с помощью этого метода можно осуществить переход к предыдущему изображению галереи.
$.prettyPhoto.close() – с помощью этого метода можно закрыть галерею.
Самый большой интерес наверняка вызовет метод, с помощью которого можно открыть галерею практически как угодно и откуда угодно. Поэтому смотрим демо. Код там настолько несложный и понятный даже интуитивно, что не стоит его и комментировать.
В общем эта галерея может удовлетворить наверное все потребности веб-мастеров. Кроме одной – слайд-шоу. Чтобы не было обидно, давайте попробуем немного доработать предыдущий пример. Мы дополнительно подключим плагин jquery.timers.js и воспользуемся тем фактом, что в опциях changepicturecallback и callback можно определить функции. В html-разметке добавим select, откуда можно будет выбирать значения задержки при смене изображений. Что из этого получилось, смотрите демо, там же можно посмотреть и исходный код.
В опции changepicturecallback, пользуясь возможностями плагина jQuery Timers, при смене изображений каждый раз запускаем одноразовый таймер со значением, полученным из выбранной опции в селекте. По срабатыванию таймера вызываем метод $.prettyPhoto.changePage(‘next’) заставляя плагин показывать следующее изображение. В опции callback определяем функцию, которая останавливает таймер, если галерея была закрыта и заодно, с помощью alert благодарим за просмотр.
На самом деле такое решение небезгрешно, но зато сделано «на колене в 5 секунд», поэтому кто имеет желание, может в комментариях предлагать свои идеи по этому поводу.
Все примеры, использованные в этой статье, лежат в этом архиве.
Для тех, кто хочет самостоятельно изучить первоисточники, пожалуйста, ссылки: LightBox, NFLightBox, PrettyPhoto.
Выводы: для себя выбрал именно PrettyPhoto…. по крайней мере пока не появилось что-нибудь еще лучше.
Отзывов (70) на «Галерея LightBox и ее клоны»
>Текст, содержащийся в атрибуте title тэга img станет комментарием к открывшемуся изображению
Может из тега A всё-таки
Хороший обзор, как и всё, что я читал на Вашем сайте. Геннадий, cпасибо за труд!
Что я могу добавить: абсолютно незаслуженно осталась без внимания прекрасная библиотека HighSlide JS.
Это мой выбор. http://highslide.com
Я вообще не нашёл в ней недостатков, кроме отсутствия счетчика текущего изображения при просмотре галереи (или плохо искал в мануале). Автор Highslide JS, норвежец Torstein Honsi, провёл гигантскую работу, мегареспект ему http://vikjavev.no/megsjol/
Вот плюсы HighSlide JS:
1) очень красивое оформление без заморочек с CSS, всё уже в комплекте;
2) также в комплекте идёт файл Outlines.psd, можно при желании добавить эффекты или изменить оттенок рамок;
3) отличная кроссбраузерность, лучшая среди представленных галерей для набора Opera – IE – FF – Chrome;
4) полная совместимость со многими jQuery-плагинами, а я их перепробовал несколько десятков;
5) создание прекрасно оформленных слайдшоу со всплывающей полупрозрачной панелью управления;
6) можно отлично разворачивать ЛЮБЫЕ ОБЪЕКТЫ, в т.ч. содержащие html, iframe, swf и AJAX. Полный контроль!
7) лаконичный синтаксис вызова; в HTML вообще можно ничего не добавлять (типа rel=’lightbox’), а цепляться к любым параметрам через jQuery и подстраивать вывод «на лету»;
например, развернуть картинку $(«img.th»).click(function() { return hs.expand(this)});
или html-блок: $(«#sh»).click(function() { return hs.htmlExpand(this, {contentId: ‘container’})});
или ajax:
Очень рекомендую зайти на сайт HighSlide (HS)) и посмотреть примеры.
Быстро перечислю замеченные мной минусы галерей данного обзора, после которых возиться с их настройкой пропало всякое желание (зачем, если есть Highslide?):
FancyBox:
- картинки не перетаскиваются левой кнопкой мыши (в HS перетаскиваются)
- вообще нет элемента, чтобы перетащить картинку;
- картинки не закрываются при щелчке на них (в HS закрываются, а листать галерею можно кнопками на панели управления или стрелками на клавиатуре, или включить режим автосмены)
- неправильно работает пролистывание галереи при нажатии на пробел (оформление пропадает, выводится просто на белом фоне)
- неправильно разворачивается при загрузке iframe: содержимое не помещается (в HS размер всегда определяется оптимально)
LightBox:
- постоянные глюки при позиционировании больших картинок, чей размер превышает окно страницы (приходится прокручивать вверх). В HS данной проблемы нет ни в одном браузере;
- проблема с определением оптимального размера при разворачивании больших картинок (в HS размер всегда идеально определяется);
- чтобы сохранить картинку, надо найти узкую вертикальную полосу посередине между блоками ссылок «prev» и «next», иначе вылезает не то контекстное меню;
NF LightBox и PrettyPhoto:
Оформление и позиционирование лучше, чем LightBox, но всё равно далеко до Highslide JS.
И респект им за счетчик фотографий в галереях.
Напоследок отмечу:
все приведённые Геннадием примеры галерей, как я понимаю, используют большинство настроек «по умолчанию». Отсюда довольно слабое оформление thumbnails. Например, такая мелочь, как изменение цвета рамки при наведении на картинку, которая потом красиво развернётся. В Highslide JS изначально всё это учтено, оформление более «живое» и симпатичное.
Если что, у меня браузер Opera 9.64, сборка 10487, Windows XP 32bit.
Спасибо за информацию Александр! Обязательно посмотрю… Да и многим думаю, тоже интересно будет
К минусам можно отнести что если выставляешь allowresize =false, то изображение ездит вместе с экраном и нет возможности его посмотреть полностью если оно большое по размерам. Тестировалось в ие6 и мозиле 3+.
А параметр allowresize =false поставил в false а не true так как в уменьшенном виде некоторые изображения (м.б. только у меня на локалхосте) почему то не грузились и вместо изображения был черный фон (при этом статус бара нет – то есть якобы изображение подгрузилось).
В lightboxe тоже иногда изображения не грузятся в уменьшенном виде, но там хотя бы идет статус бар.
Может это из-за того что это изображения в png ?
тестировалось и в ие6 и в мозиле 3+
To Александр:
Знаете, вчера выбрал время, покопался в HighSlide, действительно впечатляюще. Кстати, счетчик изображений тоже есть
Ну, а почему в обзор не попала… Во-первых, я и просто про нее не знал. Во-вторых, обзор был именно по jQuery-расширениям.
Но, соглашусь – работа конечно гигантская! Внушает!
Ребятки, помогите! Как сделать, что бы LightBox при просмотре фото ВСЕГДА показывал стрелки навигации???!!!
Лезть в код файла jquery.lightbox.js, искать #lightbox-nav-btnNext и #lightbox-nav-btnPrev, смотреть, где именно они скрываются и править.
Разве что так как-то…
50, 51 строка в css/lightbox.css:
#prevLink { left: 0; float: left; background: url(../images/prev.gif) left 50% no-repeat;}
#nextLink { right: 0; float: right;background: url(../images/next.gif) right 50% no-repeat;}
Великодушное спасибо!!! Благодарен до самых пяток и еще раз убедился в полезности знаний css…
Во всех этих плагинах срабатывание происходит при клике по ссылке, а мне нужно чтобы инлайн контент показывался по щелчку по div’у. Есть ли пример, как это можно реализовать?
Я так понимаю, что в большей степени имеется ввиду PrettyPhoto… Если использовать метод $.prettyPhoto.open (‘path/to/image’,'Title’,'Description’), то непринципиально ссылка там будет или что-то еще. Например здесь:
$("div").click(function(){ images = [...]; titles = [...]; descriptions = [...]; $.prettyPhoto.open(images,titles,descriptions); });к открытию галереи приведет клик по вообще любому элементу div на странице…
Просто надо немного понять синтаксис селекторов jQuery – ничего сложного и очень похоже на css.
Ну уж на крайний случай просто задайте в селекторе id элемента:
$("#myDiv").click(function(){ ... });Я использую fancybox. Мне нужно не открытие картинки или галереи, а показ текста из скрытого div’а. при стандартном применении на этот текст указывает ссылка, по которой и нужно кликать, а как это можно сделать в моем случае по щелчку по div’у?
Анатолий, для этого вам нужно добавить ссылкам lightbox[roadtrip]
To Lust:
Ясно, тогда вот для такой разметки:
вот такой js-код:
$(function(){ $("a:first").fancybox(); });вот примерно как-то так…
Здравствуйте, очень нравится Ваш сайт) много чего полезного для себя нашел))
У меня проблема такая возникла с плагином NFLightBox, он картинки не масштабирует автоматически при показе…. с чем это может быть связано? Пробовал даже как просто в lightBox «auto_resize: true» делать, никак не реагирует, картинки на масштабируются….
Ну, насколько я понимаю NFLightBox не умеет масштабировать изображение, чтобы вписать его в окно просмотра…

Зато есть слайд-шоу…
Именно поэтому и был сделан обзор галерей.
))) понятно…. посмотреть, может получиться перепрошить его)))
ну вот, нашел))) итак, в исходнике jquery.prettyPhoto.js есть такая замечательная функция _fitToViewport и в ней такие вот две строчки есть
imageWidth = (windowWidth – 200);
imageHeight = (windowHeight – 200);
меняем 200 например на 300 и все хорошо масштабируется)))))
Вы же вроде про NFLightBox спрашивали? А в prettyPhoto и так масштабируется… Ну поменяли Вы на 200 на 300 – принцип-то не поменялся, просто масштабироваться будет немного иначе…
Слава, методом научного тыка вы поставили кастыль.
хм… ну да… извиняюсь что совсем забыл про NFLightBox когда познакомился с prettyPhoto)))) просто у меня в prettyPhoto например на больших картинках там масштабировалось как то так, что нижняя панель с кнопками не влазила в обозримую область…
А насчет кастыля я не понял…. но метод научного тыка достаточно хороший метод))))
Костыль, я имел ввиду, что вы 200 поменяли на 300 – заработало! А что и для чего вы сделали не до конца поняли? Или не прав?
Извиняюсь что пишу тут, просто раздел http://www.linkexchanger.su/2008/39.html
уже закрыт для комментирования, вопрос, качаю в наглую Ваши исходники и ничего не работает, не могли бы вы выслать полный код, рабочий только!
To mihdan
ну почему же, я понял что таким образом мы дополнительно уменьшаем размер изображения)) просто когда писал сюда уже, видимо не правильно выразился, функция масштабирования действительно есть, просто она под мое расширение не очень хорошо масштабировала)) потому и пришлось 200 на 300 менять, чтобы нижняя панелька тоже была видна сразу) как то так…
To Женя:
Не мог бы – если хотите, это принципиальная позиция – не выложить коды, которые надо скопировать и вставить, а помочь разобраться, для этого собственно и пишу статьи, тратя свое свободное время…
Здравствуйте! А не подскажите ли как сделать так чтобы в всплывающее окно выводилась информация из EXIF фотографии? Как на этом сайте http://www.dim111.tk/ Галереи создавались в Jalbum
Здравствуйте Дмитрий! Я вообще-то писал не про HS, а про клоны LightBox…
Но насколько я сам смотрел HS, то комментарии к изображению можно определять как минимум четырьмя способами – http://highslide.com/tutorial#captions-headings
А как получить инфо из EXIF – не знаю, погуглите, наверное что-то найдется….
http://www.nihilogic.dk/labs/exif/
Gennady, а как вы относитесь к установке highslide на коммерческие сайты без покупки лицензии
Ну, такие вопросы каждый сам для себя решать должен. После ознакомления с текстом лицензии желательно
NEon – это прямое нарушение лицензии, с которой вы согласились. За это можно и по шапке получить.
так вот меня и интересует насколько у разработчиков длинные руки, смогут ли они добиться справедливости тут у нас на просторах уанета и рунета сидя у себя там за бугром. Если сайт какой то маленькой локальной фирмы, будут ли они шевелится, потому что таких которые нарушают, я думаю, много
Кто же знает насколько руки длинные? Дело-то не в этом. mihdan прав – это нарушение лицензии, а поэтому только Вы сами можете решать – стоит ее нарушать или нет…
просто этот highslide уж очень хорош, и хочется и колется
Да оплатите лицензию и не мучайтесь. $29 – не такие великие деньги…
Геннадий! Большая благодарность за статью, и один вопрос: Pretty Photo очень медленно работает в Опере и МФ, нормально ли это, можно ли ускорить загрузку изображений?
Если честно – не замечал такого поведения… prettyPhoto в общем довольно активно сам использую.
Сам с недавнего времени являюсь Вашим читателем, многим ваши материалы мне помогли, за это кланаюсь вам.
Но вот в обзоре очень зря упустили HighSlide, позволю себе отметить, что HighSlide на голову превосходит своих аналогов и по функционалу и по настройке, но вот я заметил у нее небольшой «глюк» при работе фотогалллереи с «тумбами» в Opera
В начале, в одном из комментариев, я поясняю причины, по которым HighSlide не попала в обзор…
Но может когда-то дойдут руки перевести документацию.
Здравствуйте. Прекрасная статья, узнал много чего нового. Сам я занимаюсь вёрсткой сайтов, и так же сталкиваюсь с ИЕ6, будь он неладен.
http://www.linkexchanger.su/examples_2009/galleries/prettyPhoto/demo.html – эта галерея в нём вообще поплыла. как с этим бороться?
А так же в ИЕ6 переход между фотками и первая прогрузка лайтбокса проходит как то грубо, можно это как то сгладить?
Здраствуйте. Некоторое время посещаю ваш сайт, нравится то что вы делитесь ценной информацией в достаточно широком и профессиональном ключе.
У меня небольшой вопрос по Lightbox v2.04. При открытии фото, сверху остается проежуток 91 пиксель. Как его можно уменьшить до 9 пикселей? Нигде не нашел этой информации, самостоятельно пробовал но безрезультатно.
To Кирилл:
2.04? Знаю 1.3.7-final от April 25, 2009 документация по которой есть тут
http://plugins.jquery.com/project/jquerylightbox_bal
и именно ее я упоминал в обзоре…
Чья-то другая edition?
To Виталий:
В каком смысле «поплыла»? В IE6 в общем все как и должно быть, разве только элементы управления действительно выстраиваются в столбик и фон рисунков .png виден. Можно пробовать довести до ума query.lightbox.css, а что касается проблемы с .png, то тут можно пробовать использовать плагин fixPng, который и написан для решения этой проблемы.
А вот насчет грубого перехода и первого открытия – как-то не отмечал такого, но вообще можно попробовать изменять значение опции speed…
Я пробовал PrettyPhoto и FancyBox.
Все они имеют один общий недостаток: они не могут (у меня не получилось) работать в связке с событием live(). По-этому для элементов, созданных ajax’ом работать не будут. Кто знает как подвязать их к
$(‘a.zoom’).live(«click»,function(){
$(this).gallery_func(..);
});
помоги советом или решением.
p.s. jQuery 1.3.2
Здраствуйте подскажите, я воспользовался галерея PrettyPhoto, вродебы все заработала, но есть проблемка, на первом клике по вотке идет загрузка галереи, а на втором клике по фотке нет загрузки галереи. Пример привел ниже.
Александр, примера не увидел. Без Вашей html-разметки и js-кода что-то определенное сказать трудно.
To Дмитрий:
Вопрос конечно интересный…. Если допустим все миниатюрки галереи грузятся сразу и вместе (ну как пример – галерея в одной из вкладок Tabs), тогда и проблемы нет – просто сам плагин галереи грузится вместе с разметкой.
А вот если к существующим миниатюрам добавляется еще и их надо обработать – тут да… вопрос… Пока не могу ничего толкового посоветовать.
Вот ссылка с которой возникают у меня проблемы. Напомню : кликая по правой фотографии галерея работает, а вот кликая по левой фотографии, галерея не срабатывает. У кого будет время посмотрите.
http://www.flat911.com/a.page1.html
To Александр
Тут и думать нечего – два элемента ‘a’ с одинаковым id – такого быть не должно.
А как решить эту проблему подскажите. Я просто подругому не смогу. Левая фотка относиться к тойже галереи.
Вместо id пользоваться полями ‘class’ или ‘rel’
http://www.w3schools.com/TAGS/att_a_rel.asp
Плюс совет: поставьте плагин html validator для FF. Очень выручает в таких случаях.
Попытался я Вместо id пользоваться полями ‘class’ или ‘rel’
. Так и не получилось. Я думаю причина в чем то другом.
Александр, то что советовал Вам Дмитрий – однозначно правильно. Это во-первых. Во-вторых, то, что сделано у Вас сейчас убивает весь смысл использования библиотек и плагинов (я имею ввиду файл jquery.js в котором перечисляются все галереи и картинки в них входящие).
Попробуйте сначала сделать простую галерею и добиться функциональности, которая нужна Вам. А для этого просто очень внимательно читайте описание prettyPhoto и еще очень советую разобраться с тем как работает механизм селекторов jQuery – это основы, знание которых очень сильно облегчит работу в дальнейшем.
Статьи про селекторы тоже можно найти на блоге.
Добрый день.
Спасибо за статью.
Поставил галерею LightBox.
Есть 2 вопроса:
1. Не работает в Firefox? в IE – работает
2. Не видно кнопок «Вперед», «назад».
Пожет посмотрите http://dsp.bos.ru/Galery.html , как вылечить?
Gennady привет. Ты тему о fancybox закрыл поэтому надежда на ответ тут. Уже неделю воюю с fancybox. Поставил посл версию зафиксенную все подрубил. Но в опере 8 и 9 при закгрузки картинки скачет задний фон который перекрывается еще и серым каким то а при переключении вообще сакс с фоном и слетают стили. Пробовал откат на предыдущие версии не помогает. Может подскажешь. http://rem.kharkov.ua/portfolio.html. Уже блин перелопатил все форумы. Я не спец по js больше верстка и php.
Тяжело себя собрать в кучу после праздника
Бывает такое при неверно объявленном DOCTYPE, но на указанной странице с этим все в порядке… Вероятно в стилях надо искать проблему – может покопать стилевой файл плагина…
To Yura:
Нормально он у Вас в FF работает… А с кнопками вперед – назад как я понимаю, Вы уже разобрались…
Да вот странно что в опере 8 и 9 а во всех сотальных норм
Здравствуйте! Геннадий, респект за такую прекрасную статью/обзор! =)
но возник вопрос по преттифото – при динамическом создании – 1ый раз всё ок, а потом возникают глюки – либо галерея больше не видит, либо всё оч криво отображается .. думаю всё это решится, если уничтожать/разбирать «старую» галерею, но как это сделать? вобщем помогла бы обратная этой операция :
$ («a[rel^='prettyPhoto']«).prettyPhoto();
существует ли такая? или деструктор мб?
Что Вы имеете ввиду под динамическим созданием? Если вставляете миниатюры с помощью ajax или методами типа append, то никакой деструктор тут не поможет. Обработчик, т.е. по сути метод prettyPhoto() должен подгружаться после того, как сформирована структура DOM. Ну или искать какие-то другие пути, типа использования open(images,titles,descriptions).
Ну, это уже зависит от того, что именно Вы реализуете и как это должно выглядеть и работать.
Gennady, большое спасибо за ответ!
Вы примерно правильно поняли, динамическим, тоесть по нажатии кнопки ajax’ом подгружается html файл с фотогалереей(на другие кнопки – другие html). Внутри события .ready этого html есть этот самый метод prettyPhoto(). Так вот – при первой подгрузке – всё хорошо, вторая и последующие – кривота кривущая – галерея показывает мягко говоря некрасиво. Если создавать 1 раз при загрузке основной страницы – не срабатывает галерея, при 1ой подгрузке html – во 2ой раз не сработает. и просто как я не пробовал колдовать над этим методом и галереей – результат либо хуже, либо такой же. (Если нужно – могу повырезать код и залить как пример куда-нибудь. У меня с использованием таймаута – для большей видимости этого полуглюка)
Это один из первых моих сайтов и пока за отсутсвием хороших знаний в php, использую вместо него javascript и jquery с ajax’ом, не знаю правильно ли это (как Вы считаете?), но пока всё было чётенько, а с анимацией jquery – и оч красивенько
Пока не сделал, но думаю сработает такой выход из ситуации – загрузкой этого счастья(галереи) сразу в страницу, без подгрузки ajax’ом, с невидимостью(display:none), а при нажатии кнопки – «копипастом» вставлять в нужный блок – тогда можно будет создать галерею(и) только 1 раз, и галерея и сами фото – они будут видеть друг друга и будут работать.
единственное – при первой загрузке страница будет весить больше, может даже намного.. немного неайс..
проблема сохранилась.
на оффициальном сайте выложена версия поновее – 2.5.6, в которой баг якобы исправлен («fixed a bug when prettyPhoto is re-initialized after an AJAX reload.»), действительно что-то такое есть, но видимо не до конца исправлен, или я где-то глуплю..
посмотрите пожалуйста, может найдёте ошибку или выход, я был оч благодарен. Залил исходник-пример сюда – _http://depositfiles.com/files/5e4mcbs9o и _http://rapidshare.com/files/335327333/Pretty.rar.html
сама проблема – при второй и следующих подгрузках галереи – она не срабатывает(запустите index.html, а потом два раза кликните на фотогалерею). как то это возможно поправить?
Генадий! Вы не рассматривали еще такой вариант gettopup.com?
Пока нет. Но вот сейчас конечно посмотрел – в общем тоже можно будет поговорить…
To Carson:
того, почему это происходит – Вы используете load, который выполняется как GET-запрос, если в запросе не переданы параметры. Поэтому все в кэш и во второй раз обработчик не выполняется, т.е. prettyPhoto не инициализируется.
Ваш пример посмотрел. При второй загрузке переменная $pps оказывается is undefined. Моя версия
Но это моя версия. А совет – использовать $.ajax(options), т.е. вместо этого:
$('#megodiv').load($(this).attr("href"));написать что-то вроде этого:
myUrl = $(this).attr("href"); $.ajax({ type: 'POST', url: myUrl, success: function(data){ $('#megodiv').html(data); $("a[rel^='prettyPhoto[gallery_1']") .prettyPhoto({theme:'dark_rounded'}); } });Соответственно по тому url, к которому идет запрос, рисуется только html-разметка, которая по успешному ответу вставляется в #megodiv, а потом инициализируется prettyPhoto. Вот как-то так примерно. Вроде бы должно сработать. Хотя тонкое место все-таки есть в опции success, но попробуйте…
Геннадий, спасибо за совет!, но, увы, всё осталось также – при втором открытии – переходит по ссылке.
моя же версия – это просто при второй инициализации той же галереи – преттифото её игнорит/запрещает своими способами, тем самым –> ppt undefined. Мне кажется эта фотогалерея просто не для Ajax приложений:)
Пока вышел через open – работает кульно и всегда(!), но это сильно усложняет код, особенно когда фоток больше одной, + появится некоторая беспорядочность и просмотр всегда с первой фото не самый айс, хотя как посмотреть:), а так вцелом хорошо.
>вариант gettopup.com
неплохо, но претти, имхо, пока лучшая =), несмотря на глюк с аякс
Геннадий спасибо за отличны обзор! Но у меня имеется небольшая трабла. Дело в том, что в lightbox при просмотре фото в левом нижнем углу висит надпись null. Как мне ее изменить? Помогите советом.
Если нужен наглядный пример, то вот он
http://karado.ru/index.php?option=com_adsmanager&page=show_ad&adid=2&Itemid=54
Василий, Вы читали обзор про галереи для jQuery, а используете Вы lightbox для prototype.
Кстати, я null не увидел…
Продолжить обсуждение можно на форуме jQuery – lightBox, prettyPhoto.