Была такая же проблема. Я использовал разметку ниже и сначала спрятал <div class="bxsliderWrapper">
содержащий display: none;
с помощью CSS display: none;
. Я заметил, что ширина слайдов <div class="slide">
была отрисована в 1 пиксель.
Я подозреваю, что это как-то связано с отзывчивой функцией, которая берет размеры исходного контейнера, который был скрыт, и определяет встроенные стили для каждого слайда.
<div class="bxsliderWrapper">
<div class="bxslider">
<div class="slide">Your Content</div>
<div class="slide">Your Content</div>
<div class="slide">Your Content</div>
</div>
</div>
Мое решение похоже на то, что bradrice упомянул выше об использовании встроенных функций обратного вызова. Вместо этого я просто добавил функцию reloadSlider()
к функции show()
.
<script type="text/javascript">
var $j = jQuery.noConflict();
$j(document).ready(function(){
var homeSlider = $j('.bxslider').bxSlider();
$j(".bxsliderWrapper").show(0, "swing", function(){homeSlider.reloadSlider();});
});
</script>
Он запускает перезагрузку после завершения show ().
.
ИЗМЕНИТЬ
Первоначальное решение, приведенное выше, изначально работало, но у меня были проблемы, когда кеш был очищен во время жесткого обновления shift + REFRESH
. Я предполагаю, что элементы, на которые нацелена функция .show()
, были недоступны вовремя или ресурсы еще не были загружены. (Я предполагаю) Ниже приведено исправление этого поведения.
Вместо того, чтобы скрывать Bx Slider, содержащий <div>
с display: none;
, я скрывал изображения слайдов с помощью атрибута visibility
CSS.
.bxslider .slide {
visibility: hidden;
}
Это позволяет ползунку отображать правильный размер, не видя изображения на экране, пока они не будут готовы. Затем я использовал метод jQuery .css()
, запускаемый $j(window).load()
, чтобы изменить видимость после загрузки страницы. Это гарантировало, что весь код и элементы существовали до их отображения.
<script type="text/javascript">
var $j = jQuery.noConflict();
$j(document).ready(function(){
var homeSlider = $j('.bxslider').bxSlider();
});
$j(window).load(function(){
$j(".bxslider .slide").css("visibility", "visible");
});
</script>
Этот метод также работал с несколькими ползунками на одной странице. Я обнаружил, что метод .show()
приводит к поломке всех экземпляров ползунка. Я только догадываюсь, почему это лучшее решение, но, возможно, кто-то может добавить некоторую информацию, чтобы лучше это понять.
person
user2589301
schedule
04.03.2014
display:hidden
в элемент, содержащий слайдер, и в document.ready покажите его. - person Deep Frozen   schedule 26.07.2012