Comment puis-je convertir cette jQuery en désordre pour être moins gonflée et réactive

StackOverflow https://stackoverflow.com/questions/19841802

  •  29-07-2022
  •  | 
  •  

Question

J'utilise jQuery Cycle2 et le plugin Carousel pour afficher certains événements sur mon site. Tout fonctionne très bien, mais je veux que l'option visible passe de 5 à 3 sur les tablettes (entre 768px et 1030px), puis jusqu'à 1 sur les téléphones (moins de 768px). Toutes les autres options peuvent rester les mêmes. Ce code est piraté et désordonné, donc je cherche une meilleure façon de le faire. En outre, actuellement, cela ne fonctionne que sur la rafraîchissement. C'est bien, mais ce serait bien s'il rechargeait et travaillait en temps réel lorsque vous redimensionnez. Voici mon code actuel:

// Events
var ww = document.body.clientWidth;
$(document).ready(function() {
    adjustEvents();
})
$(window).bind('resize orientationchange', function() {
    ww = document.body.clientWidth;
    adjustEvents();
});

var adjustEvents = function() {
    if (ww > 1030) {
        $('.cycle').cycle({
            fx:'carousel',
            swipe:true,
            timeout:5000,
            slides:'> article',
            carouselVisible:5,
            carouselFluid:true,
            autoHeight:'calc',
            prev:'#prev',
            next:'#next'
        });
    } 
    else if (ww >= 768) {
        $('.cycle').cycle({
            fx:'carousel',
            swipe:true,
            timeout:5000,
            slides:'> article',
            carouselVisible:3,
            carouselFluid:true,
            autoHeight:'calc',
            prev:'#prev',
            next:'#next'
        });
    }
    else if (ww < 768) {
        $('.cycle').cycle({
            fx:'carousel',
            swipe:true,
            timeout:5000,
            slides:'> article',
            carouselVisible:1,
            carouselFluid:true,
            autoHeight:'calc',
            prev:'#prev',
            next:'#next'
        });
    }
}
Était-ce utile?

La solution

$(document).ready(adjustEvents);
$(window).on('resize orientationchange', adjustEvents);

function adjustEvents() {
    var ww  = document.body.clientWidth,
        vis = ww > 1030 ? 5 : (ww >= 768 ? 3 : 1);
    $('.cycle').cycle({
        fx              : 'carousel',
        swipe           : true,
        timeout         : 5000,
        slides          : '> article',
        carouselVisible : vis,
        carouselFluid   : true,
        autoHeight      : 'calc',
        prev            : '#prev',
        next            : '#next'
    });
}

Autres conseils

Voici une version "coupée" du code ...

// Events
var ww = document.body.clientWidth;
$(document).ready(function() {
    adjustEvents();
})
$(window).bind('resize orientationchange', function() {
    ww = document.body.clientWidth;
    adjustEvents();
});

var adjustEvents = function() {
    var options = {
        fx:'carousel',
        swipe:true,
        timeout:5000,
        slides:'> article',
        carouselFluid:true,
        autoHeight:'calc',
        prev:'#prev',
        next:'#next'
    }

    if (ww > 1030) {
        options.carouselVisible = 5;
    } 
    else if (ww >= 768) {
        options.carouselVisible = 3;
    }
    else if (ww < 768) {
        options.carouselVisible = 1;
    }
    $('.cycle').cycle(options);
}

Tout ce que j'ai vraiment fait était de créer une variable pour stocker les options de cycle et de changer uniquement la propriété 1 qui était pertinente pour chaque largeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top