How to use a div element for Swiper-slide in HTML?

Optimering af Sliders til Touchskærme

11/01/2023

Rating: 4.93 (981 votes)

I en verden, hvor mobile enheder og touchskærme dominerer vores digitale interaktioner, er det afgørende, at webapplikationer fungerer fejlfrit og intuitivt på tværs af alle platforme. En almindelig udfordring, som mange webudviklere står over for, opstår, når traditionelle desktop-fokuserede UI-elementer, såsom sliders og rangesliders fra jQuery UI, skal tilpasses til touchbaserede enheder. Mens de fungerer upåklageligt med en mus, kan de på en touchskærm ofte føre til uventet adfærd, som at hele siden scroller i stedet for selve slideren. Denne artikel vil dykke ned i problematikken, udforske potentielle løsninger, herunder et specifikt 'patch' til jQuery UI, og introducere Swiper.js som en robust og moderne tilgang til at skabe fremragende touch-kompatible sliders.

What are jQuery sliders and rangesliders?
The elements in question are sliders and rangesliders as defined by jQuery UI; on the touch screen, instead of registering a touch as picking up a handle and a drag as dragging the handle across the slider, it just slides the whole webpage to the side of the screen.

Lad os starte med at forstå, hvad jQuery UI sliders og rangesliders er. jQuery UI er et bibliotek af brugerflade-interaktioner, effekter, widgets og temaer bygget oven på jQuery JavaScript-biblioteket. Sliders er interaktive elementer, der giver brugeren mulighed for at vælge en værdi fra et foruddefineret interval ved at trække et 'håndtag' langs en linje. Rangesliders er en udvidelse heraf, der giver mulighed for at vælge et interval af værdier, typisk med to håndtag. Disse er utroligt nyttige til alt fra prisfiltre i webshops til lydstyrkekontroller og datointervaller. Deres popularitet skyldes den enkle integration og den rige funktionalitet, de tilbyder 'out-of-the-box'.

Udfordringen med jQuery UI Sliders på Touchskærme

Den primære udfordring med jQuery UI sliders og rangesliders på touchskærm-enheder opstår på grund af den måde, touch-interaktioner fortolkes på. Når en bruger forsøger at trække i et sliderhåndtag, opfatter browseren ofte denne handling som et forsøg på at scrolle hele websiden. Resultatet er, at slideren ikke bevæger sig, men i stedet ruller siden til siden eller op og ned. Selvom det teknisk set er muligt at interagere med slideren ved at trykke på håndtaget og derefter trykke på den ønskede slutposition, er dette en langsom og uhandy proces, der ødelægger den intuitive brugeroplevelse, som sliders er beregnet til at levere.

Dette problem skyldes, at traditionelle musebegivenheder (mousedown, mousemove, mouseup) ikke direkte oversættes til touchbegivenheder (touchstart, touchmove, touchend) på samme måde. Browsere prioriterer ofte deres egen scrolling-funktionalitet over JavaScript-håndterede element-træk, især når det kommer til elementer, der ikke specifikt er designet til touch. Udviklere har historisk set forsøgt forskellige tilgange for at omgå dette problem, herunder brugen af plugins som jqtouch, der var populært til tidlige iPhone-webapps. Desværre, som det blev observeret, virkede forsøg på at vedhæfte .touch([...]) til slider()-kald ikke altid, sandsynligvis fordi jqtouch og jQuery UI håndterer touch-begivenheder på fundamentalt forskellige måder eller kræver specifikke integrationstrin, der ikke er indlysende.

Løsningen: Et 'Patch' til jQuery UI

En ofte refereret løsning til jQuery UI slider-problemet på touchskærme er et specifikt 'patch' eller en kodeudvidelse, der er diskuteret på jQuery UI's egen bug tracker, især under ticket #4143. Dette patch er designet til at forbedre sliderens touch-kompatibilitet ved at fange og håndtere touch-begivenheder korrekt, så de fortolkes som træk på sliderhåndtaget i stedet for side-scroll. Patchen simulerer i bund og grund musebegivenheder baseret på touch-begivenheder, hvilket gør, at jQuery UI's eksisterende logik kan fungere som forventet.

Sådan inkorporerer du dette 'patch':

For at anvende et sådant patch, som typisk er et stykke JavaScript-kode, skal du inkludere det i dit projekt efter, at du har inkluderet jQuery og jQuery UI bibliotekerne, men før du initialiserer dine jQuery UI sliders. Du kan gøre dette på flere måder:

  1. Direkte i en <script>-tag: Kopier og indsæt koden fra patchen direkte ind i en <script>-tag i din HTML-fil, placeret efter dine jQuery og jQuery UI script-inklusioner.
  2. Som en separat JavaScript-fil: Opret en ny JavaScript-fil (f.eks. jquery.ui.touch-punch.js – et populært patch, der løser netop dette problem, og som svarer til den type løsning, der diskuteres i ticket #4143), indsæt patchens kode i den fil, og link derefter til denne fil i din HTML:
    <script src="path/to/jquery.min.js"></script> <script src="path/to/jquery-ui.min.js"></script> <script src="path/to/jquery.ui.touch-punch.js"></script> <script> $(function() { $("#slider").slider(); }); </script>

    Dette patch, ofte omtalt som 'jQuery UI Touch Punch', overskriver eller udvider jQuery UI's interne event-håndtering for at inkludere touch-begivenheder. Det er en smart og relativt let løsning til eksisterende projekter, der allerede bruger jQuery UI. Det er dog vigtigt at bemærke, at afhængigheden af et patch kan medføre vedligeholdelsesudfordringer i fremtiden, især hvis jQuery UI opdateres, og patchen ikke længere er kompatibel.

    Introduktion til Swiper.js: En Moderne Tilgang til Touch Sliders

    Mens et patch kan løse specifikke problemer med jQuery UI, er den bedste praksis for touch-fokuserede interaktioner ofte at anvende biblioteker, der er bygget fra grunden med touch-support i tankerne. Her kommer Swiper.js ind i billedet. Swiper er et moderne, mobilt-første touch-slider-bibliotek, der er designet til at levere en fremragende og flydende touch-oplevelse på tværs af alle enheder. Det er utroligt alsidigt og kan bruges til billedkarruseller, produktgalleri-sliders, onboarding-skærme og meget mere.

    Fordele ved Swiper.js:

    • Indbygget Touch-Support: Designet specifikt til touch-interaktioner, hvilket eliminerer de problemer, der ses med jQuery UI.
    • Fremragende Ydeevne: Optimeret til flydende animationer, selv på ældre enheder.
    • Rig Funktionssæt: Understøtter lazy loading, virtuelle slides, forskellige overgangseffekter, navigation, pagination, scrollbars, og meget mere.
    • Responsivt Design: Fungerer problemfrit på tværs af forskellige skærmstørrelser og retninger.
    • Aktiv Udvikling: Et populært bibliotek med et stort community og løbende opdateringer.

    Sådan Implementerer du Swiper.js

    Implementering af Swiper er ligetil og følger en klar struktur. Her er en trin-for-trin guide baseret på de givne eksempler:

    1. Hent de Nødvendige Filer eller Brug CDN:
    Du kan downloade de kompilerede filer (swiper.min.js og swiper.min.css) og placere dem i din arbejdsmappe, eller du kan bruge CDN-links for nem integration, hvilket er den anbefalede metode for hurtig opsætning:

    <link rel="stylesheet" href="https://unpkg.com/[email protected]/swiper-bundle.min.css" /> <script src="https://unpkg.com/[email protected]/swiper-bundle.min.js"></script>

    Bemærk, at selvom et jQuery-script blev vist i det originale eksempel, er Swiper uafhængig af jQuery. Du behøver ikke jQuery for at bruge Swiper, medmindre du bruger det til andre dele af din applikation.

    2. Design HTML-Strukturen:
    Swiper kræver en specifik HTML-struktur, der typisk består af et hovedelement med klassen swiper-container, der indeholder et swiper-wrapper, som igen indeholder individuelle swiper-slide elementer. Hvert swiper-slide er en enkelt slide i din karrusel. Du kan placere ethvert indhold (billeder, tekst, video) inde i swiper-slide elementerne.

    What is Swiper jQuery?
    Swiper is a powerful and modular javascript library to implement responsive, accessible, flexible, touch-enabled carouses/sliders on your mobile websites and apps. Can be used as a jQuery plugin. Available for Angular, React, Vue, and Svelte. 1. Install the package with NPM. 2.
    <div class="swiper-container"> <div class="swiper-wrapper"> <div class="swiper-slide"><img src="img1.jpg"></div> <div class="swiper-slide"><img src="img2.jpg"></div> <div class="swiper-slide"><img src="img3.jpg"></div> </div> <!-- Tilføj navigation og pagination hvis nødvendigt --> <div class="swiper-pagination"></div> <div class="swiper-button-prev"></div> <div class="swiper-button-next"></div> <div class="swiper-scrollbar"></div> </div>

    3. Tilføj Grundlæggende CSS-Stil:
    Swiper leveres med en grundlæggende CSS-fil, men du skal muligvis tilføje yderligere stil for at sikre, at din container og slides vises korrekt. Især er det vigtigt at definere width og height for .swiper-container. Eksemplet viste en simpel stil:

    .swiper-container { width: 100%; height: 100%; } .swiper-slide { background: #fff; display: flex; justify-content: center; align-items: center; }

    Disse stilarter sikrer, at slideren udfylder sin forælder og centrerer indholdet i hver slide.

    4. Initialiser Swiper med JavaScript:
    Den sidste og vigtigste del er at initialisere Swiper i dit JavaScript. Dette gøres ved at oprette en ny Swiper-instans og sende selector for din swiper-container samt et konfigurationsobjekt med de ønskede indstillinger.

    Eksempel 1: Grundlæggende Slider

    Dette eksempel viser en simpel billedslider med pagination, navigationsknapper og en scrollbar. Hver slide fylder hele containeren.

    var swiper = new Swiper('.swiper-container', { pagination: { el: '.swiper-pagination', }, navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', }, scrollbar: { el: '.swiper-scrollbar', } });

    Her definerer vi, hvilke elementer der skal fungere som pagination (de små prikker under slideren), næste/forrige knapper og en scrollbar. Swiper håndterer automatisk interaktionen med disse elementer.

    Eksempel 2: Avanceret Slider med Flere Synlige Slides

    I dette eksempel ændres Swiper-indstillingerne for at vise flere slides ad gangen og introducere en 'progressbar' til pagination. Dette er ideelt for gallerier, hvor man ønsker at give et overblik over flere billeder samtidigt.

    var swiper = new Swiper('.swiper-container', { slidesPerView: 2, centeredSlides: true, pagination: { el: '.swiper-pagination', type: 'progressbar', // slidesPerView: 'auto', // Denne kan forårsage uventet adfærd med slidesPerView: 2 initialSlide: 1, resistanceRatio: 0, clickable: true }, navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', }, scrollbar: { el: '.swiper-scrollbar', }, mousewheel: true, });

    Nøgleændringerne her er slidesPerView: 2, som viser to slides samtidigt, og centeredSlides: true, som centrerer den aktive slide. pagination.type: 'progressbar' ændrer den visuelle indikator fra prikker til en fremdriftslinje. mousewheel: true aktiverer navigation med musehjul, hvilket er praktisk på desktop.

    Sammenligning: jQuery UI Sliders vs. Swiper.js

    Valget mellem jQuery UI sliders og Swiper.js afhænger stærkt af dit projekts behov og den primære brugeroplevelse, du ønsker at levere. Her er en kort sammenligning:

    FunktionjQuery UI Sliders/RangeslidersSwiper.js
    Primært FormålVærdivalg, intervalvalg (desktop-fokuseret)Indholdskarruseller, billedgalleri (touch-fokuseret)
    Touch-KompatibilitetKræver 'patch' eller tilpasning; kan være kluntetIndbygget og optimeret; flydende
    Kompleksitet (opsætning)Simpelt for desktop; mere kompleks for touchKlar struktur; let at initialisere for touch
    FunktionssætGrundlæggende slider/range-funktionalitetOmfattende for karruseller (effekter, navigation, lazy load m.m.)
    FilstørrelseDel af jQuery UI (stor for kun sliders)Moderat; kan inkluderes modulært
    VedligeholdelseAfhængig af jQuery UI opdateringer; patch kan skabe problemerAktivt udviklet; god bagudkompatibilitet

    For traditionelle værdivalgere, hvor præcision med musen er vigtigere, og touch er en sekundær overvejelse, kan jQuery UI med et passende patch være tilstrækkeligt. Men for alt, der involverer indholdsrotation, billedgallerier eller enhver form for karrusel, der skal give en fremragende touchskærm-oplevelse, er Swiper.js det klare valg.

    Bedste Praksis for Touch UI-Elementer

    Uanset om du bruger jQuery UI med et patch eller et dedikeret touch-bibliotek som Swiper, er der nogle generelle bedste praksisser for design af touch UI-elementer:

    • Større Touch-Mål: Sørg for, at interaktive elementer (håndtag, knapper) er store nok til let at blive ramt med en finger (typisk mindst 48x48 CSS-pixels).
    • Klar Visuel Feedback: Giv øjeblikkelig visuel feedback, når et element berøres eller trækkes.
    • Undgå Scroll-Konflikter: Vær opmærksom på, hvordan dine elementer interagerer med browserens standard scrolling. Brug event.preventDefault() selektivt, men forsigtigt, for at forhindre uønsket side-scroll, når en bruger interagerer med dit slider-element.
    • Test på Rigtige Enheder: Simulatoren er god, men intet slår test på faktiske touchskærmsenheder for at fange nuancer i touch-interaktioner.

    Ofte Stillede Spørgsmål (FAQ)

    Q: Hvorfor fungerer jQuery UI sliders ikke korrekt på touchskærme som standard?
    A: Som standard er jQuery UI sliders designet til musebegivenheder (klik og træk). Touchskærme fortolker 'træk'-bevægelser som side-scrolls af hele siden, hvilket overskriver sliderens tilsigtede funktion. Der kræves specifikke tilpasninger for at håndtere touch-begivenheder korrekt.
    Q: Er jQuery UI Touch Punch det officielle 'patch' fra jQuery UI?
    A: Nej, jQuery UI Touch Punch er et uofficielt, men bredt anerkendt og brugt tredjeparts-patch, der løser problemet med touch-kompatibilitet for jQuery UI widgets. Selvom det er diskuteret på jQuery UI's bug tracker, er det ikke en del af jQuery UI's kerneudgivelse.
    Q: Kan jeg bruge Swiper.js til en 'range slider' lignende funktionalitet?
    A: Swiper.js er primært designet som en indholds-karrusel eller billedslider. Selvom du kreativt kunne implementere en form for 'range slider' ved at lade brugere swipe mellem foruddefinerede 'ranges' som individuelle slides, er det ikke dets primære anvendelsesområde. For ægte numeriske range sliders, især dem der kræver præcis værdivalg, er dedikerede range slider-biblioteker eller jQuery UI (med touch-patch) mere passende.
    Q: Skal jeg inkludere jQuery for at bruge Swiper.js?
    A: Nej, Swiper.js er et uafhængigt JavaScript-bibliotek og har ingen afhængighed af jQuery. Du kan bruge det i et projekt uden jQuery. Hvis dit projekt allerede bruger jQuery, kan de eksistere side om side uden problemer.
    Q: Hvilken version af Swiper.js skal jeg bruge?
    A: Det er generelt bedst at bruge den seneste stabile version af Swiper.js for at drage fordel af de nyeste funktioner, ydeevneforbedringer og fejlrettelser. Den nævnte CDN-link i eksemplet bruger version 7.4.1, som var aktuel på tidspunktet for den oprindelige information. Tjek altid Swiper.js' officielle hjemmeside for den seneste anbefalede version.
    Q: Hvordan håndterer Swiper.js responsivt design?
    A: Swiper.js er bygget med responsivitet i tankerne. Du kan definere forskellige indstillinger for forskellige breakpoint-størrelser ved hjælp af breakpoints-indstillingen i Swiper-initialiseringen. Dette giver dig fuld kontrol over, hvordan din slider opfører sig på mobil, tablet og desktop.

    Konklusion

    At skabe en problemfri brugeroplevelse på tværs af både desktop og touchskærme er afgørende for moderne webudvikling. Mens jQuery UI sliders kan kræve et 'patch' som Touch Punch for at fungere optimalt på touch-enheder, tilbyder biblioteker som Swiper.js en mere indbygget og robust løsning til touch-fokuserede indholds-karruseller og billedsliders. Ved at forstå de specifikke udfordringer og anvende de rette værktøjer kan du sikre, at dine webapplikationer leverer en intuitiv og engagerende oplevelse for alle brugere, uanset deres foretrukne interaktionsmetode.

Hvis du vil læse andre artikler, der ligner Optimering af Sliders til Touchskærme, kan du besøge kategorien Teknologi.

Go up