#javascript #jquery #visibility #jcarousel #carousel
#javascript #jquery #видимость #jcarousel #карусель
Вопрос:
Я создаю карусель JavaScript, и мне нужно извлекать URL-адреса ссылок, отображаемых при каждом изменении карусели.
Я использую jQuery jCarousel, поскольку он позволяет разработчику привязывать различные обработчики для изменения событий.
Карусель должна отображать 4 элемента одновременно и прокручивать 4 элемента одновременно.
Реализованный мной обработчик itemFirstInCallback получает href первой ссылки на странице (например, индекс 1, индекс 5).
Мне нужно получить отображаемый в данный момент URL-адрес для первой ссылки, отображаемой во всех 4 видимых
демонстрационный код ниже…
Настройка карусели
$(document).ready(function () {
$('#featured_carousel_list').jcarousel({
visible: 4,
scroll: 4,
initCallback: mycarousel_initCallback,
buttonNextHTML: null,
buttonPrevHTML: null,
itemFirstInCallback: function (carousel, liElement, intemIndex, action) {
// get URL's of visible items
var item_URL = $(liElement).children('a:last-child').attr('href');
alert(item_URL);
}
});
});
function mycarousel_initCallback(carousel) {
$('#next_button').bind('click', function () { carousel.next(); return false;});
$('#prev_button').bind('click', function () { carousel.prev(); return false;});
}
HTML-список
<div id="prev_button"><<</div>
<div id="next_button">>></div>
<ul class="featured_carousel_list" id="featured_carousel_list">
<li><img src="images/item_sample_image.gif" alt="" width="180" height="90" /><a href="display.aspx?tid=1" class="item_text_link">title</a></li>
<li><img src="images/item_sample_image.gif" alt="" width="180" height="90" /><a href="display.aspx?tid=2" class="item_text_link">title</a></li>
<li><img src="images/item_sample_image.gif" alt="" width="180" height="90" /><a href="display.aspx?tid=3" class="item_text_link">title</a></li>
<li><img src="images/item_sample_image.gif" alt="" width="180" height="90" /><a href="display.aspx?tid=4" class="item_text_link">title</a></li>
<li><img src="images/item_sample_image.gif" alt="" width="180" height="90" /><a href="display.aspx?tid=5" class="item_text_link">title</a></li>
<li><img src="images/item_sample_image.gif" alt="" width="180" height="90" /><a href="display.aspx?tid=6" class="item_text_link">title</a></li>
<li><img src="images/item_sample_image.gif" alt="" width="180" height="90" /><a href="display.aspx?tid=7" class="item_text_link">title</a></li>
<li><img src="images/item_sample_image.gif" alt="" width="180" height="90" /><a href="display.aspx?tid=8" class="item_text_link">title</a></li>
</ul>
Ответ №1:
Если я правильно понял ваш вопрос, то вы хотите получить URL-адреса всех видимых элементов. Вы можете добиться этого, заменив свой itemFirstInCallback
обратный вызов на itemVisibleInCallback
:
itemVisibleInCallback: function(carousel, liElement) {
var item_URL = $(liElement).children('a:last-child').attr('href');
console.log(item_URL);
}
Этот обратный вызов будет запущен для всех 4 элементов, когда они станут видимыми.
Комментарии:
1. Спасибо за вашу помощь. На самом деле мне нужно было получить все URL-адреса в одном обратном вызове и отправить их обратно на сервер с помощью одного ajax-вызова, поэтому 4 разных обратных вызова на самом деле не были вариантом. В итоге я перебрал следующие 3 элемента <li> с помощью функции slice…
itemFirstInCallback: function (carousel, liElement, itemIndex, action) { var urlItems = []; $.each($(liElement).parent().children().slice((itemIndex - 1), (itemIndex num_items) - 1), function (index, value) { var itemURL = $(value).children('a:last-child').attr('href'); urlItems.push(itemURL); });