Как перезапустить карусель совы 2.0?

Я знаю, что в первой версии owl carousel мы делали это так:

var $carousel = $('#carousel');
var owl = $carousel.data('owlCarousel'); 
owl.reinit({touchDrag: false, mouseDrag: false;});

Хорошо, но как мы это делаем во второй версии, я не знаю, как они ее переименовали.


person gauvain robert    schedule 16.08.2014    source источник
comment
Что вы подразумеваете под этим? Кстати, вы проверили документы новой версии ??   -  person T J    schedule 16.08.2014
comment
@TJ Даже когда он это сделал. В настоящее время документы устарели, потому что у меня нет времени их обновлять.   -  person witrin    schedule 17.08.2014


Ответы (8)


По некоторым причинам $('#your_carousel').trigger('destroy.owl.carousel') работает неправильно. он не удаляет все классы, которые необходимы для повторной инициализации плагина.

Вам нужно будет полностью удалить их, чтобы уничтожить «совиную карусель 2». как описано здесь в этом выпуске на github: https://github.com/smashingboxes/OwlCarousel2/issues/460

Чтобы уничтожить функцию совы, используйте:

$('#your_carousel').trigger('destroy.owl.carousel').removeClass('owl-carousel owl-loaded');
$('#your_carousel').find('.owl-stage-outer').children().unwrap();

Это сработало идеально для меня:

// find element
$owl = $('body').find('#your_carousel');

// set the owl-carousel otions
var carousel_Settings = {
  touchDrag: false,
  mouseDrag: false
};

function initialize(){
  var containerWidth = $('body').find('.navbar').outerWidth();
  if(containerWidth <= 767) {
    // initialize owl-carousel if window screensize is less the 767px
    $owl.owlCarousel( carousel_Settings );
  } else {
    // destroy owl-carousel and remove all depending classes if window screensize is bigger then 767px
    $owl.trigger('destroy.owl.carousel').removeClass('owl-carousel owl-loaded');
    $owl.find('.owl-stage-outer').children().unwrap();
  }
}

// initilize after window resize
var id;
$(window).resize( function() {
  clearTimeout(id);
  id = setTimeout(initialize, 500);
});

// initilize onload
initialize();
person Daniel    schedule 21.03.2015
comment
Не работает @Daniel - person Ranjith M; 28.09.2017

Вы можете сделать это с помощью destroy, но вы должны использовать последнюю develop ветку:

$('#carousel').owlCarousel('destroy'); 
$('#carousel').owlCarousel({touchDrag: false, mouseDrag: false});

Или с прямым доступом к плагину:

$('#carousel').data('owl.carousel').destroy(); 
$('#carousel').owlCarousel({touchDrag: false, mouseDrag: false});
person witrin    schedule 17.08.2014
comment
Работает нормально для меня. Большое спасибо. - person Ashutosh Ojha; 13.06.2017

Теперь вы можете уничтожить его так:

var simple = $('#simple');
simple.owlCarousel(); // created
simple.owlCarousel('destroy'); // destroyed
person Sergey Tyupaev    schedule 31.01.2018

Это определенно работает:

if (container.hasClass("owl-carousel")) {
    container.owlCarousel({
        touchDrag: false,
        mouseDrag: false
    });
    container.data('owlCarousel').destroy();
    container.removeClass('owl-carousel owl-loaded');
    container.find('.owl-stage-outer').children().unwrap();
    container.removeData();
}

И сам плагин:

if (this.settings.responsive !== false) {
                window.clearTimeout(this.resizeTimer);
                $(window).off('resize.owl.carousel');
                this.off(window, 'resize', this.e.onThrottledResize);
            }

в Owl.prototype.destroy = функция()

person Макаров Алексей    schedule 26.02.2015

Я не уверен, вы пробовали заменить?

Согласно документации OwlCarousel, указанной здесь http://www.owlcarousel.owlgraphic.com/docs/api-events.html, инициируемое событие — "replace.owl.carousel". Вы можете реализовать это следующим образом:

var $carousel = $('#carousel');
var owl = $carousel.data('owlCarousel'); 
owl.trigger('replace.owl.carousel', [{touchDrag: false, mouseDrag: false;}]);

Надеюсь, это поможет!

person Francis    schedule 17.08.2014
comment
Спасибо за совет @witrin! - person Francis; 05.05.2015
comment
URL-адрес не работает, но я обнаружил, что этот работает: https://htmlpreview.github.io/?https://github.com/OwlFonk/OwlCarousel/blob/master/index.html также есть функция owl.reinit(...), которая может представлять интерес - person xmoex; 12.01.2017
comment
По состоянию на 24.08.2017 другая ссылка тоже не работает. - person Szczepan Hołyszewski; 24.08.2017
comment
у тебя проблемы с синтаксисом - person Mahdi mehrabi; 11.07.2020

Если использовать v1.3, я сделаю следующее

$('#OwlWrapper').owlCarousel({option...});
$('#OwlWrapper').append('<div><img class="img-fluid" src="demo_files/images/1200x800/5-min.jpg" alt=""></div>');
$('#OwlWrapper').data('owlCarousel').reinit();

Это работа для меня.

person Galaxy IT    schedule 29.12.2018
comment
Добро пожаловать в Stack Overflow! Вы ответили на очень старый вопрос. Пожалуйста, убедитесь, что ваш ответ относится к вопросу и добавляет что-то, чего нет в других ответах. Вы должны увидеть как написать хороший ответ. - person totokaka; 29.12.2018

$('#your_carousel').trigger('destroy.owl.carousel').removeClass('owl-carousel owl-loaded'); $('#your_carousel').find('.owl-stage-outer').children().unwrap();

Просто сделайте это, чтобы уничтожить карусель совы, а затем используйте общую функцию инициализации для повторного запуска.

person Shirsendu Kar    schedule 05.03.2020

Для версии Owl Carousel v2.3.4:

// Slider element.
let sliderElement = $('#msg-slider');

// Destroy first.
sliderElement.trigger('destroy.owl.carousel');

// Then empty whole owl div.
sliderElement.empty();

// Re-init owl slider.
sliderElement
    .owlCarousel({
        loop:true,
        margin:0,
        nav:false,
        dots:true,
        responsive:{
            0: {
                items: 1
            },
            600: {
                items:1
            },
            1000: {
                items:1
            }
        }
});

Надеюсь, это поможет кому-то. Спасибо.

person Jaydeep Mor    schedule 14.05.2021