у меня был тот же самый вопрос, и в конечном итоге следующим раствором:
HTML:
<ul class="slider">
...
<li class="slide">
<img src="[PLACEHOLDER IMAGE]" data-src="[ACTUAL IMAGE]">
</li>
...
</ul>
Javascript:
function loadSlide(slider, $element) {
var page = slider.getCurrentSlide(),
visible = Math.floor($element.closest('.bx-viewport').width()/$element.find('.slide').width()),
slides = $element.find('.slide:not(.bx-clone)'),
firstSlide = slides.eq(page * visible);
for (var i = 0; i < visible; i++) {
var img = firstSlide.find('img'),
imgSrc = img.attr('data-src');
if (imgSrc && imgSrc !== '') {
img.hide().attr('src', imgSrc).fadeIn().removeAttr('data-src');
}
firstSlide = firstSlide.next('.slide');
}
}
// init bxSlider
$('.slider').each(function(idx, el) {
var $el = $(el),
thisSlider = $el.bxSlider({
// config options
onSlideBefore: function() {
loadSlide(thisSlider, $el);
}
});
});
Некоторые замечания:
- Я инициализируется сценарий с использованием
$.each
, а не просто потому, что $('.slider').bxSlider()
bxSlider не передавая ссылку на экземпляр ползунка, и мне нужно, что использовать метод getCurrentSlide
.
getCurrentSlide
позволяет нам узнать, к какой странице мы переезжаем, поэтому мы можем использовать это, чтобы выяснить, какой элемент является первым на этой странице. У меня возникли проблемы с получением этой информации строго из bxSlider, но это, вероятно, проще, чем я это делаю.
- Поскольку он перемещается по изображениям на слайде, он освобождается, если у них нет атрибута
data-src
. Если это так, оно заменяет его атрибутом src
и уменьшает его изображение.
- Убедитесь, что ваша первая страница изображений ссылается на допустимые изображения, так как она настроена только для обработки, когда ползунок меняет страницы.
- Я на 90% уверен, что мое решение бесполезно сложно, но оно работает для меня.
Вы можете проверить рабочий пример здесь: http://codepen.io/a_double/pen/RNaRZw
Надежда, что помогает!