Комментарии под фотографиями
Добрый день.
Задался целью добавить комментария Facebook API под фото-галлерею на FancyBox или LightBox, идея приходит только одна - генерировать на php отдельные iFrame страницы, но php для меня как луна. Возможно кто-то уже делал подобное или подскажет что-то. Заранее спасибо. |
Для меня наоборот php - земля.
Не пойму как сделать. Скачал примеры по fancybox, сделал как с картинками, но вместо картинки вставляю в ссылку путь к php файлу и передаю параметр image.php?id_image=10 В файле image.php забираю параметр, и вывожу на экран картинку <img src="'.$_GET['id_image'].'.jpg"> Вот в самом простом варианте так. Все выводит, все хорошо, Но проблема в размере окна fancybox. слишком высокие картинки не умещаются в область отведенную для fancybox и появляется полоса прокрутки в окне fancybox. Мне нужно, чтобы высота fancybox была равна высоте картинки + 100 px, для вывода комментариев под картинкой. Как это сделать, ума не приложу. Я думаю понятно объяснил. Вот настройки fancybox:
<script type="text/javascript">
$(document).ready(function(e) {
$("a.gallery2").fancybox(
{
"padding" : 20, // отступ контента от краев окна
"zoomOpacity" : true, // изменение прозрачности контента во время анимации (по умолчанию false)
"zoomSpeedIn" : 500, // скорость анимации в мс при увеличении фото (по умолчанию 0)
"zoomSpeedOut" :800, // скорость анимации в мс при уменьшении фото (по умолчанию 0)
"zoomSpeedChange" : 1000, // скорость анимации в мс при смене фото (по умолчанию 0)
"frameWidth" : screen.width-350, // ширина окна, px (425px - по умолчанию)
"overlayShow" : true, // если true затеняят страницу под всплывающим окном. (по умолчанию true). Цвет задается в jquery.fancybox.css - div#fancy_overlay
"overlayOpacity" : 0.8, // Прозрачность затенения (0.3 по умолчанию)
"hideOnContentClick" :false, // Если TRUE закрывает окно по клику по любой его точке (кроме элементов навигации). Поумолчанию TRUE
"centerOnScroll" : false // Если TRUE окно центрируется на экране, когда пользователь прокручивает страницу
});
});
</script>
вот так вывожу картинки: <a class="gallery2" href="image.php?id=900"><img src="путь до привьюшки"></a> Помогите плиз, бъюсь второй день (( |
В общем мне нужно заставить fancybox растягиваться по высоте в зависимости от того, что у менаходится в php файле. Либо, каким-то, не знаю каким способов передавать в свойство frameHeight значение высоты картинки+100. Высоту кратинки я могу получить в php, либо с помощью javascript (но только после полной загруки картинки). или в ссылке для каждого изображения передавать высоту и получать ее в этом же скрипте, например так:
<a class="gallery2" href="image.php?id=900&height=500"><img src="путь до привьюшки"></a> <a class="gallery2" href="image.php?id=905&height=820"><img src="путь до привьюшки"></a> <a class="gallery2" href="image.php?id=804&height=1250"><img src="путь до привьюшки"></a> Вот как то так. В принципе последний вариант с размером в ссылке я думаю простой и легко реализуемый, но опять же у меня не получается. |
Если делаю только так
$('a.gallery2').click(function () {alert('fff');})
Тогда при нажатии на картинку у меня появляется алерт fff, но не появляется картинка, вообще больше ничего не происходит. Если делаю только так:
$("a.gallery2").fancybox(
{
"padding" : 20, // отступ контента от краев окна
"zoomOpacity" : true, // изменение прозрачности контента во время анимации (по умолчанию false)
"zoomSpeedIn" : 500, // скорость анимации в мс при увеличении фото (по умолчанию 0)
"zoomSpeedOut" :800, // скорость анимации в мс при уменьшении фото (по умолчанию 0)
"zoomSpeedChange" : 1000, // скорость анимации в мс при смене фото (по умолчанию 0)
"frameWidth" : screen.width-350, // ширина окна, px (425px - по умолчанию)
"frameHeight" : 333,
"overlayShow" : true, // если true затеняят страницу под всплывающим окном. (по умолчанию true). Цвет задается в jquery.fancybox.css - div#fancy_overlay
"overlayOpacity" : 0.8, // Прозрачность затенения (0.3 по умолчанию)
"hideOnContentClick" :false, // Если TRUE закрывает окно по клику по любой его точке (кроме элементов навигации). Поумолчанию TRUE
"centerOnScroll" : false // Если TRUE окно центрируется на экране, когда пользователь прокручивает страницу
});
Тогда само собой загружается fancybox и картинка появляется в новом окне. Если делаю все вместе:
$('a.gallery2').click(function () {alert('fff');})
$("a.gallery2").fancybox(
{
"padding" : 20, // отступ контента от краев окна
"zoomOpacity" : true, // изменение прозрачности контента во время анимации (по умолчанию false)
"zoomSpeedIn" : 500, // скорость анимации в мс при увеличении фото (по умолчанию 0)
"zoomSpeedOut" :800, // скорость анимации в мс при уменьшении фото (по умолчанию 0)
"zoomSpeedChange" : 1000, // скорость анимации в мс при смене фото (по умолчанию 0)
"frameWidth" : screen.width-350, // ширина окна, px (425px - по умолчанию)
"frameHeight" : 333,
"overlayShow" : true, // если true затеняят страницу под всплывающим окном. (по умолчанию true). Цвет задается в jquery.fancybox.css - div#fancy_overlay
"overlayOpacity" : 0.8, // Прозрачность затенения (0.3 по умолчанию)
"hideOnContentClick" :false, // Если TRUE закрывает окно по клику по любой его точке (кроме элементов навигации). Поумолчанию TRUE
"centerOnScroll" : false // Если TRUE окно центрируется на экране, когда пользователь прокручивает страницу
});
Тогда алерт не появляется, загружается только картинка в новом окне fancybox. Так как мне из click передать в значение высоты:
$("a.gallery2").fancybox(
{
......
"frameHeight" : значение полученное из click-a,
......
});
Сделать бы как то так например:
$('a.gallery2').click(function () {
var height;
height = 500;
return height;
})
но как мне получить эту функцию без click потом ума не приложу. |
Или может если кто знаком с плагином этим, подскажите как сделать высоту резиновую?
|
И так, пришел к следующему:
function parseGetParams() {var $_GET = {};var link; link= $('a.gallery2').attr("href"); var __GET = link.split("&"); for(var i=0; i<__GET.length; i++) {var getVar = __GET[i].split("=");$_GET[getVar[0]] = typeof(getVar[1])=="undefined" ? "" : getVar[1];}return $_GET;}
function ht()
{
var GETArr = parseGetParams();
s=GETArr['height']*1+350;
return s;
}
$("a.gallery2").fancybox(
{
"padding" : 20, // отступ контента от краев окна
"zoomOpacity" : true, // изменение прозрачности контента во время анимации (по умолчанию false)
"zoomSpeedIn" : 500, // скорость анимации в мс при увеличении фото (по умолчанию 0)
"zoomSpeedOut" :800, // скорость анимации в мс при уменьшении фото (по умолчанию 0)
"zoomSpeedChange" : 1000, // скорость анимации в мс при смене фото (по умолчанию 0)
"frameWidth" : screen.width-350, // ширина окна, px (425px - по умолчанию)
"overlayShow" : true, // если true затеняят страницу под всплывающим окном. (по умолчанию true). Цвет задается в jquery.fancybox.css - div#fancy_overlay
"overlayOpacity" : 0.8, // Прозрачность затенения (0.3 по умолчанию)
"hideOnContentClick" :false, // Если TRUE закрывает окно по клику по любой его точке (кроме элементов навигации). Поумолчанию TRUE
"centerOnScroll" : false, // Если TRUE окно центрируется на экране, когда пользователь прокручивает страницу
"frameHeight" : ht()
});
Теперь осталось две проблемы. 1. в самую первую функцию в link= $('a.gallery2').attr("href"); у меня всегда попадает только адрес первой ссылки. То есть на какую ссылку бы я ни нажал, всегда будет адрес первой ссылки. А мне нужно получить адрес нажатой ссылкит. 2. Ссылки вида: <a class="gallery2" href="/script/jqp.php?id=1&height=550">1</a> Выдают адрес, хоть и самой первой ссылки но все же выдают. А ссылки вида: <a class="gallery2" href="/script/jqp.php?id=1&height=550"><img src="/image.jpg"></a> Выдают ошибку, типа нету адреса. что-то вроде undefinded. Осталось совсем чуть чуть до решения вопроса, помогите пожалуйста. Тут даже вопрос уже не по fancybox, а чистый javascript. |
1. Это потому что скрипт отрабатывает один раз, при загрузке страницы, а не каждый раз при клике на фотке.
Слайдерописатели в основном пишут код для себя и поддерживать или расширять его тяжело, в виду его малой вменяемости. |
| Часовой пояс GMT +3, время: 16:42. |