Я полагаю, что вы используете турбоинки, и когда вы возвращаетесь, страница кэшируется ею, и при загрузке она перезапускает функцию инициализации карусели совы.
Проблема, в основном, заключается в том, что турболинки не воспроизводятсяхорошо с неидемпотентными функциями https://github.com/turbolinks/turbolinks#making-transformations-idempotent
Мне удалось обойти эту проблему с другими плагинами js, поэтому она должна работать для вас.
В принципе, идея заключается в следующем:
Сначала, когда пользователь впервые заходит на страницу, скопируйте содержимое элемента с классом .owl-carousel
на себя в качестве атрибута данных
carousel = $('.owl-carousel');
carousel.data('originalHtml', carousel.html();
carousel.owlCarousel(....)
Затем, когда пользователивозвращается, прежде чем инициализировать карусель, проверить, была ли она инициализирована и кэширована, в этом случае сначала замените содержимое на исходное и удалите классы
carousel = $('.owl-carousel');
if (carousel.hasClass('owl-loaded')) {
carousel.html(carousel.data('originalHTML')).removeClass('owl-theme owl-loaded owl-drag');
}
carousel.owlCarousel(....)
Вы можете смешать оба шага в один:
$(function() {
const carousel = $('.owl-carousel');
if (carousel.hasClass('owl-loaded')) { //if it has the class then it means it's the cached view
carousel.html(carousel.data('originalHTML')).removeClass('owl-theme owl-loaded owl-drag');
} else { // else it's a fresh load of the page
carousel.data('originalHtml', carousel.html());
}
carousel.owlCarousel(....)
})
Это немного странно, но я нашел единственный способ использовать плагины, которые не готовы работать с турболинками, без изменения этих плагинов.
АноДругой вариант - просто отключить Turbolinks, если вы считаете, что он вам просто не нужен.