#javascript #jquery #html
#javascript #jquery #HTML
Вопрос:
Я внедряю этот jQuery image zoomer на своем сайте. Суть того, как это работает, заключается в том, что у меня есть разметка HTML следующим образом: (Скрипка)
<a class="zoom" href="bigimage.jpg">
<img src="smallimage.jpg" />
</a>
Затем мне нужно активировать плагин следующим образом: (обратите внимание, что плагин вызывается в родительском контейнере изображения, в данном случае в <a>
теге, а не в самом изображении)
$(function() {
$('a.zoom').zoom({url: 'bigimage.jpg'});
});
Как вы можете видеть, я указал URL-адрес большого изображения в коде активации. Есть ли способ получить URL-адрес большого изображения из href родительского изображения или, возможно data-bigimage
, атрибута в html?
Например, что-то вроде.
$('a.zoom').zoom({
url: $(this).attr('href') // or $(this).data('bigimage')
});
Который явно не работает, но, надеюсь, указывает, что требуется.
Ответ №1:
Плагин сначала ищет атрибут data-src, если параметр url не указан, поэтому вы можете сделать это следующим образом: http://jsfiddle.net/3ktNJ/33 /
Поместите URL-адрес большого изображения в атрибут data-src :
<a class="zoom">
<img data-src="http://placekitten.com/400/600" src="http://placekitten.com/200/300" />
</a>
<br>
<a class="zoom">
<img data-src="http://placekitten.com/500/700" src="http://placekitten.com/200/300" />
</a>
Вызов функции без параметра URL :
$('a.zoom').zoom();
Комментарии:
1. вау, ты прав. Странно, что автор, похоже, не указал это в документах или readme
2. это тоже меня зацепило, поэтому сначала я придумал немного дикое (не очень хорошее) решение! затем я просмотрел исходный код и заметил, что он проверяет наличие там данных-src =)
Ответ №2:
Если то, что у вас есть, не работает, вы можете попробовать:
$(function(){
$('a.zoom').each(function(){
var thisURL = $(this).attr('href');
$(this).zoom({url: thisURL});
});
}
Ваша скрипка здесь обновлена: http://jsfiddle.net/3ktNJ/1 /
ОБНОВЛЕНИЕ По запросу OP в плагин было внесено небольшое изменение. Это не влияет на нормальное использование плагина:
Этот раздел был отредактирован:
if (!settings.url) {
$urlElement = $source.find('img');
if ($urlElement[0]) {
settings.url = $urlElement.data('src') || $urlElement.attr('src');
}
if (!settings.url) {
return;
}
}
К этому: вы заметите, что я добавил здесь дополнительный оператор ‘if’, чтобы обойти диспетчер URL. Я все еще не уверен, почему значение !settings.url
false, даже когда оно выводит реальную строку URL… Но, похоже, это работает.
if (!settings.url) {
if ($(target).attr('href')) {
settings.url = $(target).attr('href');
} else {
$urlElement = $source.find('img');
if ($urlElement[0]) {
settings.url = $urlElement.data('src') || $urlElement.attr('src');
}
if (!settings.url) {
return;
}
}
}
ОБНОВЛЕННЫЙ FIDDLE ЗДЕСЬ В качестве дополнительного бонуса, специально для ваших нужд, вам не нужно указывать родительский источник href для небольшого изображения. Он автоматически захватит его и будет использовать, если вы не укажете URL. В нижней части скрипки вы заметите, что он не отправляет никаких URL-адресов, но он все еще работает, как планировалось. Затем, если вы удалите href
in your <a>
, он будет работать нормально, как и раньше (что в любом случае не идеально).
Надеюсь, это поможет!
Комментарии:
1. Действительно, это работает, но требует вызова плагина для каждого экземпляра разметки, что может снизить производительность. Есть ли способ, который включает в себя вызов его только один раз?
2. @harryg У вас будет только одно изображение? Разве вам не нужно это для всех изображений с именем класса
zoom
?3. У меня может быть несколько
zoom
контейнеров. Исходный метод будет нацелен на все эти контейнеры как один раз, в то время как ваш метод перебирает их один за другим. Это неплохое решение, но было бы неплохо оптимизировать.4. @harryg Очень верно, он будет перебирать один за другим при загрузке dom. Я думаю, что это может вызвать проблему только при наличии сотен изображений. Я буду продолжать изучать это
5. @ActionDan Извините, вы ошибаетесь. Он получает URL
<a>
тега, а не изображение внутри него.
Ответ №3:
Если я правильно понимаю вопрос…вы хотите получить href родительского div изображения…это должно сработать:
$("img").parent(".zoom").attr("href");
Я добавил его в верхнюю строку вашей скрипки здесь: http://jsfiddle.net/mN7m3 /
Комментарии:
1. Нет, извините, я не думаю, что вы правильно поняли. Мой вопрос заключается в том, как передать значение
href
функции вызова плагина.