Автоматический lightbox для всех картинок на странице
Есть замечательная статья "Автоматический lightbox для всех картинок на странице", но буквально капли удобства использования данному решению не хватает.
И не хватает самую малость, если применить стиль для превью получившейся картинки, ну скажем задать для неё сдвиг влево (style="float: left;"), или сделать отступ (style="margin-left: 10px; margin-right: 10px;"), то все эти стили скрипт просто вырежет. Поэтому немного отредактируем его, а вернее одну строчку из этого скрипта. Смотрим скрипт lighbox_prepair.js с комментариями, строка №29. Заменим её на такую:
$('<a class="fancyLink" rel="gallery" href="'+domain_path+img_real_path+img_real_name+'.'+dot_arr[dot_arr.length-1]+'"><img src="'+imgs[i].src+'" style="'+imgs[i].style.cssText+'" alt="'+imgs[i].alt+'" title="'+imgs[i].title+'" /></a>').insertBefore(imgs[i]); // вставляем перед картинкой ссылку, с классом 'fancybox', на полноразмерную картинку и саму превью картинки
Что же здесь мы изменили?
А изменили мы здесь, вернее добавили вызов для превью картинки стиля, если таковой имеется, а также атрибутов alt и title, тоже в общем то бывает не лишним.
Ну и на последок для особо ленивых, кто хочет получить всё и сразу в одном месте приведу весь скрипт lighbox_prepair.js с добавками, которые чуть выше были проделаны.
jQuery(document).ready(function() { /*lightbox autothumb*/ var i,j,z,key = ''; var imgs=$('img'); //выбираем все картинки со страницы var flag=false; //флаг для обозначения нужно ли применять lightbox var imgs_count=$('img').length; if (imgs_count>0) { //если на странице есть картинки то работаем for(i=0; i<imgs_count; i++){ var arr=imgs[i].src.split('/'); //делим всю строчку src на части чтобы убрать лишнее for (key in arr) { if (arr[key] == 'autothumbs.php?img=') { //если есть у src картинки есть autothumbs.php?img= значит мы на верном пути flag=true; //ставим флаг для включения lightbox var path_start=key; //позиция в массиве arr с которой начинается путь к картинке img_scr=arr[arr.length-1]; //берем имя картинки img_name_arr=img_scr.split('_'); //дели его на части чтобы убрать размер добавленный для autothumbs.php var img_real_name=''; //составляем имя for(j=0; j<img_name_arr.length-2; j++){ img_real_name=img_real_name+img_name_arr[j]; if(j<img_name_arr.length-3) img_real_name=img_real_name+'_'; } var img_real_path='',domain_path=''; var start=parseInt(path_start)+1; for(z=start;z<arr.length-1; z++) img_real_path=img_real_path+arr[z]+'/'; //составляем путь к картинке for(j=0;j<start-1; j++) domain_path=domain_path+arr[j]+'/'; //составляем имя домена dot_arr=img_scr.split('.'); //делим имя картинки на части чтобы вычленить расширение $('<a class="fancyLink" rel="gallery" href="'+domain_path+img_real_path+img_real_name+'.'+dot_arr[dot_arr.length-1]+'"><img src="'+imgs[i].src+'" style="'+imgs[i].style.cssText+'" alt="'+imgs[i].alt+'" title="'+imgs[i].title+'" /></a>').insertBefore(imgs[i]); // вставляем перед картинкой ссылку, с классом 'fancybox', на полноразмерную картинку и саму превью картинки $(imgs[i]).remove(); // удаляем оригинал превью картинки } } } } if (flag===true) { //если флаг поставлен, то применяем ко всем ссылкам с классом 'lightBox' скрипт lightbox $('a.lightBox').lightBox(); } });
04.06.2012