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:22. |