What touch events are supported by jQuery Mobile?

jQuery UI Sortable på mobil: En dybdegående guide

23/10/2024

Rating: 4.63 (11078 votes)
Indholdsfortegnelse

jQuery UI Sortable på mobil: En dybdegående guide

jQuery UI's Sortable-widget er en kraftfuld funktion, der giver brugerne mulighed for at omarrangere elementer i lister eller gitre med simpel træk-og-slip-funktionalitet. Mens den fungerer upåklageligt på desktop-browsere, har mange udviklere stødt på udfordringer, når de forsøger at implementere den på mobile enheder som iPads og andre touch-baserede enheder. Dette skyldes primært forskellene i, hvordan touch-events håndteres sammenlignet med muse-events. Denne guide vil dykke ned i, hvordan du får jQuery UI Sortable til at fungere på mobile enheder, herunder fejlfinding af almindelige problemer og udnyttelse af de relevante indstillinger.

Does jQuery UI sortable work on mobile?
The link for the top-voted Answer is now broken. To get jQuery UI Sortable working on mobile: Add this JavaScript file to your project. Reference that JS file on your page. For more information, check out this link. See similar questions with these tags.

Forståelse af Touch-Events vs. Muse-Events

På en desktop-enhed interagerer brugere typisk med webindhold via en mus. jQuery UI Sortable er designet med disse muse-events (som mousedown, mousemove og mouseup) i tankerne. På mobile enheder er interaktionen derimod baseret på berøring (touch). De tilsvarende touch-events er touchstart, touchmove og touchend.

Den mest almindelige faldgrube, når man forsøger at få Sortable til at virke på touch-enheder, er at ignorere disse forskelle. Hvis du blot anvender standard jQuery UI Sortable-kode på en touch-enhed uden yderligere tilpasninger, vil træk-og-slip-funktionaliteten sandsynligvis ikke udløses korrekt. Dette skyldes, at de underliggende event-lyttere i jQuery UI Sortable primært er bundet til muse-events.

Hvordan Får Man jQuery UI Sortable til at Virke på Touch-Enheder?

For at få jQuery UI Sortable til at fungere på touch-enheder som iPads, er det essentielt at simulere muse-events ved hjælp af touch-events. En almindelig tilgang er at binde touch-events til at udløse de tilsvarende muse-events. Dette kan gøres ved at tilføje event-lyttere for touchstart, touchmove og touchend og derefter manuelt udløse de relevante muse-events på det element, der bliver trukket.

En typisk implementering kunne se således ud:

$( function() { $("#sortable").sortable(); // Tilføj touch-event håndtering $("#sortable").on('touchstart touchmove touchend', function(event) { var touch = event.originalEvent.touches[0] || event.originalEvent.changedTouches[0]; var simulatedEvent; switch(event.type) { case 'touchstart': simulatedEvent = new MouseEvent('mousedown', { bubbles: true, cancelable: true, view: window, screenX: touch.screenX, screenY: touch.screenY, clientX: touch.clientX, clientY: touch.clientY }); break; case 'touchmove': simulatedEvent = new MouseEvent('mousemove', { bubbles: true, cancelable: true, view: window, screenX: touch.screenX, screenY: touch.screenY, clientX: touch.clientX, clientY: touch.clientY }); break; case 'touchend': simulatedEvent = new MouseEvent('mouseup', { bubbles: true, cancelable: true, view: window, screenX: touch.screenX, screenY: touch.screenY, clientX: touch.clientX, clientY: touch.clientY }); break; default: return; } // Udløs den simulerede event på det berørte element event.target.dispatchEvent(simulatedEvent); // Forhindr standard scroll-adfærd, hvis det er en touchmove if (event.type === 'touchmove') { event.preventDefault(); } }); }); 

Bemærk: Koden ovenfor er et simpelt eksempel. I mere komplekse scenarier kan det være nødvendigt at tilpasse den yderligere for at håndtere flere berøringspunkter eller specifikke UI-elementer.

Do sortable items share draggable properties?
By default, sortable items share draggable properties. Want to learn more about the sortable interaction? Check out the API documentation. jQuery UI is a curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library.

Fejlfinding: Scroll-problemer og `preventDefault()`

En almindelig udfordring, som mange støder på, er at forhindre siden i at scrolle, når man forsøger at trække et element. Brugere forventer, at de kan scrolle siden ved at trække med fingeren, men hvis touchmove-eventet afbrydes for tidligt, kan dette forhindre den ønskede scroll-funktionalitet.

Som brugeren i dit eksempel nævnte, kan brug af event.preventDefault();, event.cancelBubble=true; og event.stopPropagation();touchmove- og scroll-events føre til, at siden ikke længere kan scrolle. Dette sker, fordi disse metoder forhindrer standardadfærd for eventet.

Nøglen til at løse dette ligger i at være selektiv med, hvornår du kalder preventDefault(). Du bør kun kalde det, når du aktivt trækker et sortérbart element, og ikke for almindelig side-scroll. I eksemplet ovenfor er event.preventDefault(); placeret inden i touchmove-casen, hvilket er en god start. Det er dog vigtigt at sikre, at dette kun sker, når et sortérbart element er i gang med at blive trukket.

En mere robust løsning involverer at kontrollere, om det element, der modtager touchmove-eventet, rent faktisk er et sortérbart element, der er ved at blive trukket. Dette kan gøres ved at tjekke for klasser eller data-attributter, der indikerer, at et element er en del af en sortérbar liste.

Does jQuery UI have a draggable plugin?
The main reason that this plugin exist is that there are currently no good jQuery plugin for making elements draggable, that has touch devices as it's main target (at least that I know of). jQuery UI has a draggable plugin which, together with jQuery UI Touch Punch , can be used to make elements draggable on touch devices.

jQuery UI Sortable Indstillinger til Mobilbrug

jQuery UI Sortable tilbyder en række indstillinger, der kan være særligt nyttige til at optimere oplevelsen på touch-enheder:

IndstillingBeskrivelseRelevans for Mobil
axisBegrænser trækningen til en bestemt akse (f.eks. "x" eller "y").Nyttig til at forhindre utilsigtet vandret eller lodret bevægelse på små skærme.
cancelForhindrer sortering, hvis trækningen starter på elementer, der matcher en selector.God til at forhindre, at interaktion med knapper eller inputfelter inden for et sortérbart element udløser sortering.
containmentBegrænser trækningen til et bestemt område.Kan bruges til at forhindre, at elementer trækkes ud af det synlige område på en mobilskærm. Værdier som "parent" eller "window" er nyttige.
cursorDefinerer musemarkøren under sortering.Mindre relevant for touch, men kan stadig påvirke visuel feedback.
cursorAtJusterer positionen af den hjælpe-element, der trækkes.Kan forbedre præcisionen på touch-skærme ved at sikre, at trækket starter fra det korrekte punkt.
delayForsinkelse i millisekunder, før sortering starter.Kan være nyttig for at undgå utilsigtet trækning, når brugeren blot ønsker at trykke på et element.
distanceMinimum distance i pixels, før sortering starter.Ligner delay, hjælper med at skelne mellem et tryk og et træk.
forceHelperSizeTvinger hjælpe-elementet til at have en fast størrelse.Kan forhindre, at størrelsen på det trukkede element ændrer sig uventet på mobile enheder.
forcePlaceholderSizeTvinger placeholder-elementet til at have en fast størrelse.Sikrer en konsistent visuel oplevelse, når elementer omarrangeres.
helperDefinerer, hvordan hjælpe-elementet ser ud under trækning (f.eks. "clone").Brug af "clone" kan give en bedre visuel indikation af, hvilket element der trækkes.
opacityJusterer gennemsigtigheden af hjælpe-elementet.Kan bruges til at give visuel feedback, når et element trækkes over andre.
placeholderEn CSS-klasse til placeholder-elementet.Vigtigt for at give brugeren et klart visuelt signal om, hvor elementet vil blive placeret.
revertAnimerer elementet tilbage til sin oprindelige position, hvis trækningen mislykkes.Giver en god brugeroplevelse ved at give visuel feedback på fejlslagne handlinger.
scrollRuller siden automatisk, når man nærmer sig kanten.Meget vigtig for mobil. Sørg for, at denne er sat til true (standard), men vær opmærksom på, at den kan komme i konflikt med manuel scrolling, som diskuteret tidligere.
scrollSensitivityAfstand fra kanten, der udløser scrolling.Justerbar for at finjustere scroll-adfærd på touch-skærme.
scrollSpeedHastigheden af side-scrolling.Kan justeres for en glattere scroll-oplevelse.
toleranceHvornår et element betragtes som værende over et andet ("intersect" eller "pointer")."pointer" kan være mere responsiv på touch-skærme, da det baseres på præcis fingerplacering.

Særlige Overvejelser for Table Rows

jQuery UI Sortable kan også bruges til at omarrangere rækker i en tabel. Det er dog vigtigt at bemærke, at du skal gøre tbody-elementet sortérbart, ikke selve table-elementet. Dette skyldes, hvordan tabeller er struktureret i HTML.

$( function() { $("#myTable tbody").sortable(); }); 

Deling af Draggable Egenskaber

Et vigtigt aspekt af jQuery UI Sortable er, at sortérbare elementer som standard deler draggable egenskaber. Det betyder, at de kan trækkes rundt, ligesom elementer der kun er defineret som draggable. Dette er grundlaget for, hvordan Sortable fungerer – det bygger oven på den underliggende draggable funktionalitet i jQuery UI.

Bedste Praksis for Mobil Sortérbarhed

  • Test grundigt på forskellige enheder: Hvad der virker på en iPad, virker måske ikke på en Android-telefon. Test på et bredt udvalg af enheder og operativsystemer.
  • Prioriter touch-events: Sørg for, at din kode korrekt håndterer touchstart, touchmove og touchend.
  • Undgå aggressive preventDefault(): Vær forsigtig med at afbryde standardadfærd. Implementer logik, der kun forhindrer scrolling, når det er nødvendigt for selve trækningen.
  • Brug klare visuelle indikatorer: Sørg for, at brugerne tydeligt kan se, hvilket element der trækkes, og hvor det vil blive placeret (via placeholder og helper indstillinger).
  • Overvej touch-venlige størrelser: Sørg for, at dine sortérbare elementer er store nok til at blive trykket på komfortabelt med en finger.
  • Optimér ydeevnen: Komplekse sortérbare lister kan påvirke ydeevnen på ældre mobile enheder. Test og optimér, hvis nødvendigt.

Konklusion

At få jQuery UI Sortable til at fungere problemfrit på mobile enheder kræver en dybere forståelse af touch-events og omhyggelig implementering. Ved at simulere muse-events korrekt, håndtere preventDefault() med omhu og udnytte de relevante indstillinger i Sortable-widgetten, kan du skabe en intuitiv og effektiv brugeroplevelse, der fungerer lige så godt på en smartphone som på en desktop-computer. Husk altid at teste din implementering grundigt for at sikre maksimal kompatibilitet og ydeevne.

Ofte Stillede Spørgsmål (FAQ)

Virker jQuery UI Sortable på alle touch-enheder?
Med den rette implementering, der håndterer touch-events korrekt, bør det fungere på de fleste moderne touch-enheder. Dog kan der være variationer i browser- og OS-implementeringer, der kræver specifikke justeringer.
Hvad er den bedste måde at håndtere scrolling på, mens man trækker et element på mobil?
Den bedste metode er at bruge event.preventDefault() selektivt på touchmove-events, men kun når et element faktisk er ved at blive trukket. Undgå at anvende det på alle touchmove-events, da det vil forhindre al side-scrolling.
Kan jeg trække elementer mellem forskellige sortérbare lister på mobil?
Ja, ved at bruge connectWith-indstillingen kan du tillade elementer at blive trukket mellem flere sortérbare lister, også på mobile enheder, så længe touch-håndteringen er korrekt implementeret.
Hvordan påvirker tolerance-indstillingen mobilbrug?
tolerance: "pointer" kan være mere responsiv på touch-skærme, da den afhænger af den præcise placering af fingeren, i modsætning til tolerance: "intersect", der kræver en større overlapning af elementerne.

Hvis du vil læse andre artikler, der ligner jQuery UI Sortable på mobil: En dybdegående guide, kan du besøge kategorien Teknologi.

Go up