Eh bien, j'utilise un plugin owl-carousel-2 maintenant.
Et je rencontre le problème suivant:
<div class="owl-carousel" style="display: none;">
<div class="item"><img src="..." /></div>
<div class="item"><img src="..." /></div>
<!-- ... -->
<div class="item"><img src="..." /></div>
</div>
<script>
$(function() {
var $owl = $('.owl-carousel');
$owl.owlCarousel();
// Doing many things here.
$owl.show();
});
</script>
Le problème est:
Lorsque j'initialise avec l'instruction $owl.owlCarousel();
, qui sous un état caché, sa taille n'est pas initialisée.
Donc, quand je montre ce contrôle, le contrôle s'affiche dans un désordre!
Mais lorsque je redimensionne la fenêtre, elle semble déclencher un nouveau rendu. Le contrôle affiche le contenu, puis s'affiche correctement.
Je me demande donc s'il existe un moyen de déclencher cette méthode de re-rendu (ou d'actualisation) dessus.
Afin de vous assurer que le contrôle ne s'affichera pas dans un désordre.
J'ai essayé de lire les documents et les sources, mais je n'ai pas encore de bonne solution.
Veuillez aider.
J'ai découvert une solution laide et sale. Quoi qu'il en soit, cela a fonctionné:
var $owl = $('.owl-carousel');
$owl.trigger('destroy.owl.carousel');
// After destory, the markup is still not the same with the initial.
// The differences are:
// 1. The initial content was wrapped by a 'div.owl-stage-outer';
// 2. The '.owl-carousel' itself has an '.owl-loaded' class attached;
// We have to remove that before the new initialization.
$owl.html($owl.find('.owl-stage-outer').html()).removeClass('owl-loaded');
$owl.owlCarousel({
// your initial option here, again.
});
Cela a fonctionné, mais d'une manière si sale. Espérant voir une meilleure solution, soignée.
Cela fonctionne pour moi:
// get owl element
var owl = $('.owl-carousel');
// get owl instance from element
var owlInstance = owl.data('owlCarousel');
// if instance is existing
if(owlInstance != null)
owlInstance.reinit();
Plus d'informations: http://owlgraphic.com/owlcarousel/demos/manipulations.html
Ran dans le même problème avec OP. J'arrive à le faire fonctionner en supprimant d'abord le owl-loaded
classe. Ensuite, lors du rendu, déclenchez un événement d'actualisation après avoir rajouté la classe.
// Remove the owl-loaded class after initialisation
$owl.owlCarousel().removeClass('owl-loaded');
// Show the carousel and trigger refresh
$owl.show(function(), {
$(this).addClass('owl-loaded').trigger('refresh.owl.carousel');
})
Voici ma solution, basée sur la solution de contournement intelligente de fish_ball:
if($('.owl-carousel').hasClass('owl-theme')){ //resize event was triggering an error, this if statement is to go around it
$('.owl-carousel').trigger('destroy.owl.carousel'); //these 3 lines kill the owl, and returns the markup to the initial state
$('.owl-carousel').find('.owl-stage-outer').children().unwrap();
$('.owl-carousel').removeClass("owl-center owl-loaded owl-text-select-on");
$(".owl-carousel").owlCarousel(); //re-initialise the owl
}
Avec Owl Carousel 2, vous réinitialisez comme suit:
jQuery('.owl-carousel').trigger('refresh.owl.carousel');
voir ce problème .
Quant à 2.0.0-beta.2.4, cela fonctionne pour moi:
var $owl = $('.owl-carousel');
if ($owl.data('owlCarousel')) {
$owl.data('owlCarousel').onThrottledResize();
}
Avez-vous lu la documentation du plugin que vous utilisez, car le carrousel de hibou a une méthode de rafraîchissement lorsque vous souhaitez mettre à jour le carrousel.
refresh.owl.carousel
Type: attachable, cancelable, triggerable
Callback: onRefresh
Parameter: [event, speed]
Le les documents sont ici pour événements