Owl carousel 2 не работает с табами - как поправить?
Есть 2 owl carousel 2, каждый в своем табе.
В первой вкладке слайдер работает должным образом, но как только перехожу на вторую вкладку, то слайдер отображается некорректно: все сбивается в кучу. Как я понимаю, это возникает из-за того, что первый таб скрыт. В первой версии owl carousel, говорят, такой проблемы не возникает, но мне нужна именно вторая из-за некоторых фич. Пробую навесить на ивент переключения таба перезагрузку OWL-carousel trigger('refresh.owl.carousel'), но что-то делаю неправильно, т.к. эфеекта никакого не наблюдается.. Как поправить? фидл
$(document).ready(function() {
$("#owl-demo").owlCarousel({
nav: true,
responsive: {
0: {
items: 1
},
600: {
items: 3
},
1000: {
items: 3
}
}
});
$("#owl-demo2").owlCarousel({
nav: true,
responsive: {
0: {
items: 1
},
600: {
items: 3
},
1000: {
items: 3
}
}
});
$(".nav-tabs>li.active").click(function() {
$(".owl-carousel").trigger('refresh.owl.carousel');
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://rawgit.com/OwlFonk/OwlCarousel2/develop/src/js/owl.carousel.js"></script>
<script src="https://rawgit.com/OwlFonk/OwlCarousel2/develop/src/js/owl.navigation.js"></script>
<script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="http://owlcarousel.owlgraphic.com/assets/owlcarousel/assets/owl.theme.default.min.css">
<link rel="stylesheet" href="http://owlcarousel.owlgraphic.com/assets/owlcarousel/assets/owl.carousel.min.css">
<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css">
<div class="tabbable">
<!-- Only required for left/right tabs -->
<ul class="nav nav-tabs">
<li class="active"><a href="#tab1" data-toggle="tab">Section 1</a>
</li>
<li><a href="#tab2" data-toggle="tab">Section 2</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tab1">
<p>I'm in Section 1.</p>
<div id="owl-demo" class="owl-carousel">
<div class="item">
<h1>1</h1>
</div>
<div class="item">
<h1>2</h1>
</div>
<div class="item">
<h1>3</h1>
</div>
<div class="item">
<h1>4</h1>
</div>
<div class="item">
<h1>5</h1>
</div>
<div class="item">
<h1>6</h1>
</div>
</div>
</div>
<div class="tab-pane" id="tab2">
<p>Howdy, I'm in Section 2.</p>
<div id="owl-demo2" class="owl-carousel">
<div class="item">
<h1>1</h1>
</div>
<div class="item">
<h1>2</h1>
</div>
<div class="item">
<h1>3</h1>
</div>
<div class="item">
<h1>4</h1>
</div>
<div class="item">
<h1>5</h1>
</div>
<div class="item">
<h1>6</h1>
</div>
</div>
</div>
</div>
</div>
|
ligisayan,
самое простое открыть таб -- проинициализировать слайдер - закрыть таб. |
Цитата:
$(".nav-tabs>li.active").click(function() { $(".owl-carousel").trigger('refresh.owl.carousel'); }); или неправильно инициализирую карусель и нужен триггер initialize.owl.carousel ? А закрыть таб - это как? |
ligisayan,
http://jsfiddle.net/Epmwx/284/ |
рони, супер! спасибо!!!
еще бы понять такой момент - почему при загрузке owl-карусель не инициализируется так как следует, а при вызове редактора кода (f12) - обновляется..? |
ligisayan,
вы бы хоть на форуме поискали ... display: none; -- нет элемента нет размера 1 причина, слайдеру откуда брать размер? 2 причина использование ready вместо load -- картинки не успевают прогрузится (потом берутся из кеша ) и лучше если картинки имеют размер в теге или css, тогда можно без load ссылка на тему ... подобных ещё десяток http://javascript.ru/forum/dom-windo...-v-tabakh.html |
Цитата:
была оказывается еще и 3 причина о которой я не подумал - картинки в слайдере изначально меньшего размера, чем на выходе в слайдере и по сути - они успевают загрузится, но в исходном разрешении, а уже при обновлении страницы (f12) - растягиваются под размеры слайда |
Привет. Проблему решил следующим образом.
Заметил что при изменении размера окна - Owl карусель сама обновляет размеры элементов. Есть у них встроенный обработчик, метод ".onResize", собственно идея в том чтобы вызывать этот метод при переключении таб.
<div id="new-products" role="tabpanel" class="tab-pane active">
<div id="owl-carousel-new-products" class="owl-carousel">
<div class="product-item"><img src="./images/1.png"></div>
<div class="product-item"><img src="./images/2.png"></div>
<div class="product-item"><img src="./images/3.png"></div>
<div class="product-item"><img src="./images/4.png"></div>
<div class="product-item"><img src="./images/5.png"></div>
</div>
</div>
$('#owl-carousel-new-products').owlCarousel(owlConfig);
$('[data-toggle="tab"]').each(function () {
$(this).on('click', function (e) {
var carouselId = $($(e.target).attr('href')).find('.owl-carousel').attr("id");
var carouselObj = ($("#"+carouselId).owlCarousel(owlConfig)).data('owlCarousel');
if ( carouselObj && typeof carouselObj.onResize === "function") {
setTimeout(function () {
carouselObj.onResize();
}, 50);
}
});
});
Если будут вопросы - пишите. |
| Часовой пояс GMT +3, время: 10:00. |