Медленная загрузка изображений Flexslider
Я использую Flexslider на веб-сайте, который я создаю.
мне очень нравится отзывчивость, и именно поэтому я не хочу меняться на nivo-slider или что-то подобное.
минус в том, что он не отображает первое изображение до загрузки всех изображений. Таким образом, вы должны ждать, чтобы все изображения в слайдере загружались, чтобы сайт выглядел правильно. Это приемлемо на рабочем столе / ноутбуке, но не на мобильном устройстве.
Я нашел подобный вопрос здесь Flexslider - изображения прелоадер но я не мог заставить его работать.
Я использую это для запуска кода
$(window).load(function() {
$('.flexslider').flexslider();
});
и это в моем HTML
<ul class="slides">
<li>
<img src="pictures/slide1.jpg" alt=" ">
<li>
<img src="pictures/slide2.jpg" alt=" ">
</li>
<li>
<img src="pictures/slide3.jpg" alt=" ">
</li>
<li>
<img src="pictures/slide4.jpg" alt=" ">
</li>
</ul>
вопрос. Как сделать так, чтобы слайдер показывал первое изображение как можно быстрее? а потом второй и так далее.
EDIT: я решил проблему. Он представлен в правильном ответе ниже. Если у вас есть лучшее решение: Пожалуйста, поделитесь :D
6 ответов
Ok. поэтому я нашел способ сделать это.
в css-файле flexslider добавьте эту строку
.flexslider .slides > li:first-child {display: block; -webkit-backface-visibility: visible;}
в строке после этой строки:
.flexslider .slides > li {display: none; -webkit-backface-visibility: hidden;}
это заставит первое изображение появиться, и он будет ждать загрузки других изображений, прежде чем он вращается.
Я знаю, что это старая проблема, но у меня есть более простое решение.
найти
.flexslider .slides > li {display: none; -webkit-backface-visibility: hidden;}
и измените селектор на
.flexslider .slides > li:not(:first-child)
я быстро исправил эту проблему, добавив стиль css в таблицу стилей flexslider стиль:
.flexslider .slides > li a img{visibility:visible !important; opacity:1 !important;filter:alpha(opacity=100) !important;}
Я нашел самый гладкий способ сделать это.
добавьте div с первым изображением слайдера перед контейнером flexslider, как это.
<div class="pre-flexslider-container">
<img src="slider.jpg">
</div>
<div class="main-flexslider-container" style="display: none">
<div class="flexslider">
.
.
.
</div>
</div>
затем добавьте следующий код для инициализации flexslider:
$(window).load(function(){
$('.flexslider').flexslider({
.
.
.
.
.
start: function(slider){
$('.pre-flexslider-container').css("display","none");
$('.main-flexslider-container').css("display","block");
slider.resize();
}
});
});
smoothHeight: false //{NEW} Boolean: Allow height of the slider to animate smoothly in horizontal mode
Если вы установите smoothHeight как true try в режиме по умолчанию, он также может улучшить производительность
есть несколько способов вы можете идти.
сначала вы можете попробовать добавить скрытые теги изображения, такие как:
<img src="pictures/slide1.jpg" style="display:none">
<img src="pictures/slide2.jpg" style="display:none">
<img src="pictures/slide3.jpg" style="display:none">
<img src="pictures/slide4.jpg" style="display:none">
<ul>...your slides...</ul>
для предварительной загрузки ваших изображений. Однако я бы рекомендовал не использовать этот метод.
другое решение, которое быстро покажет ваш контент (но не было протестировано с IE6), - использовать слайдер, найденный вhttps://github.com/ozzyogkush/jquery.contentSlider . Это виджет слайдера, который я разрабатываю, который отлично работает. Это требуется небольшое изменение макета DOM, но вы можете иметь как сложные слайды, как вам нужно.