Wie kann ich diese chaotische JQuery so konvertieren, um weniger aufgebläht und reaktionsschnell zu sein?

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

  •  29-07-2022
  •  | 
  •  

Frage

Ich verwende JQuery Cycle2 und das Carousel -Plugin, um einige Ereignisse auf meiner Website anzuzeigen. Es funktioniert alles großartig, aber ich möchte, dass sich die sichtbare Option von 5 auf 3 auf Tablets (zwischen 768px und 1030px) und dann auf 1 auf Telefonen (weniger als 768px) ändern kann. Alle anderen Optionen können gleich bleiben. Dieser Code wird zusammen und unordentlich gehackt, also suche ich eine bessere Möglichkeit, es zu tun. Derzeit arbeitet es nur mit Aktualisierung. Das ist in Ordnung, aber es wäre schön, wenn es in Echtzeit in Echtzeit nachladen würde, wenn Sie die Größe ändern. Hier ist mein aktueller Code:

// 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'
        });
    }
}
War es hilfreich?

Lösung

$(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'
    });
}

Andere Tipps

Hier ist eine "beschnittene" Version des 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);
}

Ich habe nur eine Variable erstellt, um die Zyklusoptionen in zu speichern und nur die 1 -Eigenschaft zu ändern, die für jede Breite relevant war.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top