26/12/2022
- Introduktion til Touch Events på iPhone
- Hvad er Touch Events?
- De Vigtigste Touch Event Interfaces
- Typer af Touch Events
- Fra Interfaces til Gestures
- Håndtering af Emulerede Mouse Events
- Grundlæggende Brug af Touch Events
- Best Practices for Touch Event Håndtering
- Implementeringsstatus og Fremtidige Udviklinger
- Sammenligning: Touch Events vs. Mouse Events
- Ofte Stillede Spørgsmål om Touch Events
- Konklusion
Introduktion til Touch Events på iPhone
I en verden domineret af smartphones er touch-skærmen blevet vores primære interface til den digitale verden. Apple's iPhone revolutionerede måden, vi interagerer med teknologi på, og bag den intuitive oplevelse ligger et sofistikeret system af touch events. Disse events er byggestenene, der gør det muligt for apps at reagere på alt fra et simpelt tryk til komplekse to-fingers-bevægelser som pinch-to-zoom. At forstå, hvordan touch events fungerer, er essentielt for udviklere, der ønsker at skabe engagerende og responsive applikationer.

Denne artikel vil dykke ned i de grundlæggende principper bag touch events, de forskellige typer af events, de underliggende interfaces, og hvordan man kan udnytte dem til at skabe rige brugeroplevelser. Vi vil også se på best practices og vigtige overvejelser, når man arbejder med touch-input.
Hvad er Touch Events?
Touch events er en mekanisme, der giver applikationer mulighed for at registrere og reagere på interaktioner, der sker på en touch-følsom overflade. En multi-touch-interaktion starter, når en finger (eller stylus) først rører overfladen. Andre fingre kan derefter røre overfladen og bevæge sig. Interaktionen afsluttes, når alle fingre fjernes fra overfladen. I løbet af denne proces modtager applikationen touch events i forskellige faser: start, bevægelse og afslutning. Dette giver applikationen mulighed for at fortolke brugerens intentioner og anvende sin egen logik på inputtet.
Mens mange ældre webindhold er designet til tastatur- og musinput, er touch-skærm-enheder nu mainstream. Webapplikationer kan enten direkte behandle touch-baseret input ved hjælp af touch events eller bruge emulerede museevents. En væsentlig fordel ved touch events er deres understøttelse af samtidigt brugerinput. Hvor mus-events typisk kun kan registrere én handling ad gangen, kan touch events håndtere flere samtidige berøringer på forskellige steder på skærmen, hvilket markant forbedrer brugeroplevelsen.
De Vigtigste Touch Event Interfaces
Touch events er defineret af tre centrale interfaces:
- Touch: Repræsenterer et enkelt kontaktpunkt på en touch-følsom enhed. Dette kan være en finger eller en stylus. Et touch-objekt indeholder information som et unikt ID, mål-elementet, og X/Y-koordinaterne for kontaktpunktet i forhold til viewport, side og skærm.
- TouchList: Repræsenterer en liste over aktive kontaktpunkter på touch-overfladen. Hvis brugeren rører skærmen med én finger, indeholder listen ét element. Med tre fingre indeholder den tre elementer.
- TouchEvent: Repræsenterer en event, der sendes, når tilstanden af kontakter med en touch-følsom overflade ændrer sig. Denne interface indeholder vigtige attributter som status for modifier-taster (f.eks. Shift-tasten) og tre forskellige TouchList-attributter:
- touches: En liste over alle touch-punkter, der i øjeblikket er på skærmen.
- targetTouches: En liste over touch-punkter, der er på det specifikke DOM-element, som eventen blev udløst på.
- changedTouches: En liste over touch-punkter, hvis status har ændret sig i forhold til den seneste event. For eksempel, ved
touchstart, er det de nye touch-punkter; vedtouchmove, er det de touch-punkter, der er flyttet; og vedtouchend, er det de touch-punkter, der er blevet fjernet.
Disse interfaces arbejder sammen for at give en detaljeret kontrol over touch-interaktioner, hvilket muliggør alt fra simple tryk til avancerede multi-touch-bevægelser.
Typer af Touch Events
Der er fire primære typer af touch events, som en applikation kan lytte efter:
- touchstart: Udløses, når et touch-punkt placeres på touch-overfladen. Dette markerer starten på en interaktion.
- touchmove: Udløses, når et touch-punkt bevæger sig langs touch-overfladen, mens kontakten opretholdes. Dette er essentielt for at spore bevægelser som swipes eller træk-og-slip.
- touchend: Udløses, når et touch-punkt fjernes fra touch-overfladen. Dette markerer afslutningen på en interaktion.
- touchcancel: Udløses, når et touch-punkt er blevet afbrudt på en implementeringsspecifik måde. Et almindeligt eksempel er, hvis for mange touch-punkter oprettes samtidigt, eller hvis systemet beslutter at annullere touch-inputtet.
Fra Interfaces til Gestures
De grundlæggende touch events giver mulighed for at bygge mere komplekse brugerdefinerede gestures. Hvordan en applikation fortolker disse events, afhænger af den ønskede funktionalitet. Nogle faktorer, der kan overvejes, inkluderer:
- Afstand: Hvor langt et touch-punkt har bevæget sig fra dets startposition.
- Tid: Tidsintervallet mellem start og slut af et touch, eller mellem to hurtige tryk (double-tap).
- Retning: Retningen af en swipe-bevægelse (f.eks. venstre mod højre).
- Antal fingre: Hvor mange fingre der er involveret i interaktionen.
For eksempel, hvis en applikation skal håndtere et simpelt tryk på et specifikt element, kan den bruge targetTouches listen i touchstart event-handleren til at behandle touch-punktet. Hvis applikationen derimod skal understøtte en to-fingers-swipe, kan den bruge changedTouches listen i touchmove event-handleren til at detektere, at to touch-punkter er bevæget sig, og derefter implementere logikken for denne specifikke gestus.
Håndtering af Emulerede Mouse Events
Det er vigtigt at bemærke, at browsere ofte sender emulerede museevents (som mousedown, mousemove, mouseup) som respons på enkelte touch-interaktioner. Dette sikrer bagudkompatibilitet med ældre webindhold. Dog kan dette føre til uønsket adfærd, hvis din applikation også forsøger at håndtere touch events separat. For at forhindre disse emulerede museevents i at blive sendt, kan du bruge metoden preventDefault() inde i dine touch event handlers.
Hvis du ønsker at håndtere både mus- og touch-input på en samlet måde, er det ofte bedre at bruge Pointer Events, som er en nyere standard designet til at unificere input fra forskellige enheder.
Grundlæggende Brug af Touch Events
Lad os se på et simpelt eksempel på, hvordan man implementerer touch event handlers:
1. Registrer Event Handlers
Først skal du tilføje event listeners til det element, du ønsker at overvåge touch-interaktioner på.
const myElement = document.getElementById('myInteractiveElement'); myElement.addEventListener('touchstart', handleTouchStart, false); myElement.addEventListener('touchmove', handleTouchMove, false); myElement.addEventListener('touchcancel', handleTouchCancel, false); myElement.addEventListener('touchend', handleTouchEnd, false); 2. Implementer Event Handlers
Derefter definerer du funktionerne, der skal håndtere hver event. Disse funktioner vil indeholde logikken for dine brugerdefinerede gestures.
function handleTouchStart(ev) { // Undersøg antallet af aktive touch-punkter switch (ev.touches.length) { case 1: // Håndter enkelt-touch gestus processSingleTouch(ev); break; case 2: // Håndter to-finger gestus processTwoFingerGesture(ev); break; default: // Håndter andre gestus eller ignorer handleUnsupportedGesture(ev); break; } } function handleTouchMove(ev) { // Forhindrer standard browser-adfærd (f.eks. scrolling) ev.preventDefault(); // Logik til at spore bevægelse af touch-punkter processTouchMovement(ev); } function handleTouchCancel(ev) { // Håndter afbrudte touch-interaktioner console.log('Touch afbrudt!'); } function handleTouchEnd(ev) { // Håndter afsluttede touch-interaktioner console.log('Touch afsluttet!'); }
3. Tilgå Touch Point Data
Inde i dine event handlers kan du få adgang til detaljeret information om hvert touch-punkt via ev.touches, ev.targetTouches, eller ev.changedTouches.
// Eksempel i en touchstart handler for (const touch of ev.targetTouches) { console.log(Touch ID: ${touch.identifier}); console.log(X-koordinat: ${touch.clientX}, Y-koordinat: ${touch.clientY}); // Processer yderligere data for hvert touch-punkt } Best Practices for Touch Event Håndtering
For at sikre en optimal brugeroplevelse og en robust implementering af touch events, er her nogle vigtige best practices:
- Minimer arbejdet i handlers: Udfør så lidt beregning som muligt direkte i touch event handlers. Komplekse operationer kan forsinke brugerens feedback. Overvej at bruge
requestAnimationFrametil at håndtere visuelle opdateringer. - Tilføj handlers til specifikke elementer: Omfang ikke event listeners til hele dokumentet, medmindre det er absolut nødvendigt. Tilføj dem til de specifikke elementer, der skal interagere. Dette forbedrer ydeevnen og reducerer risikoen for konflikter.
- Gruppér event listeners: Tilføj
touchmove,touchend, ogtouchcancelevent handlers inden for den sammetouchstarthandler, hvor det er relevant. Dette sikrer, at alle nødvendige event listeners er aktive, når en touch-interaktion starter. - Tilstrækkelig stor touch-mål-område: Sørg for, at de elementer, brugerne skal trykke på, er store nok til at rumme en finger. For små områder kan resultere i, at brugeren ved et uheld aktiverer andre elementer, hvilket fører til uønskede events. Apple anbefaler et minimumsområde på 44x44 point.
- Undgå
preventDefault()unødvendigt: MenspreventDefault()er vigtigt for at forhindre emulerede museevents, skal det kun bruges, når det er nødvendigt. Hvis du har brug for standard browser-adfærd som scrolling, skal du undlade at kaldepreventDefault()påtouchmoveevents, medmindre du selv implementerer scrolling-logik.
Implementeringsstatus og Fremtidige Udviklinger
Understøttelsen af touch events er bred blandt mobile browsere. Selvom desktop-browserunderstøttelsen halter lidt efter, er der løbende forbedringer. Der er også igangværende standardiseringsarbejde for at tilføje nye features til touch events, som f.eks. detaljeret information om touch-kontaktens form og tryk. Disse nye features, såsom X/Y-radius af kontaktområdet, rotationsvinkel og trykintensitet, vil give endnu finere kontrol over brugerinteraktioner i fremtiden.
Sammenligning: Touch Events vs. Mouse Events
For at illustrere forskellene, lad os se på en simpel sammenligning:
| Funktion | Touch Events | Mouse Events |
|---|---|---|
| Input Typer | Finger, stylus | Mus, touchpad |
| Samtidighed | Understøtter multi-touch (flere fingre) | Understøtter typisk kun et enkelt input |
| Detaljeringsgrad | Giver adgang til identifier, targetTouches, changedTouches | Mindre detaljeret, primært position og knapstatus |
| Gestures | Ideel til komplekse gestures (pinch, swipe, rotate) | Begrænset til simple peg-og-klik handlinger |
| Emulering | Kan udløse emulerede museevents (kræver preventDefault()) | Ingen emulering af touch events |
| Anvendelsesområde | Touch-skærm enheder (smartphones, tablets) | Desktop computere, ældre enheder |
Ofte Stillede Spørgsmål om Touch Events
- Hvornår skal jeg bruge
touchesvs.targetTouchesvs.changedTouches?
Brugtouchesfor at få et overblik over alle aktive touch-punkter på skærmen. BrugtargetTouchesfor at fokusere på de touch-punkter, der direkte påvirker det aktuelle element. BrugchangedTouchesfor at identificere, hvilke touch-punkter der er startet, flyttet eller afsluttet i den aktuelle event. - Hvordan kan jeg implementere en zoom-funktion med to fingre?
Du skal lytte eftertouchstart,touchmoveogtouchendevents. Itouchstartskal du gemme startpositionerne og ID'erne for de to touch-punkter. Itouchmoveskal du beregne afstanden mellem de to punkter og sammenligne den med startafstanden. En ændring i afstanden indikerer en zoom-bevægelse. Husk at brugepreventDefault()itouchmovefor at forhindre scrolling. - Hvad sker der, hvis jeg ikke kalder
preventDefault()?
Hvis du ikke kalderpreventDefault()på en touch-interaktion, der normalt ville udløse museevents (f.eks. et enkelt tryk), vil både touch events og emulerede museevents blive sendt. Dette kan føre til, at din applikation udfører handlingen to gange eller opfører sig uforudsigeligt. - Kan jeg bruge touch events til at spore præcist tryk?
De grundlæggende touch events giver ikke direkte adgang til tryk-intensitet. Dog er der ved at blive standardiseret nye properties, der vil muliggøre dette i fremtiden. Indtil da kan du estimere tryk baseret på varigheden af kontakten eller størrelsen af kontaktområdet, selvom dette er mindre præcist.
Konklusion
Touch events er en fundamental del af moderne app-udvikling, især for enheder som iPhone. Ved at forstå de forskellige interfaces, eventtyper og hvordan man fortolker touch-input, kan udviklere skabe dybt engagerende og intuitive brugeroplevelser. Fra at registrere simple tryk til at orkestrere komplekse multi-touch-gestures, giver touch events den nødvendige kontrol. Husk at følge best practices for at sikre ydeevne og en problemfri interaktion for brugerne. Med den fortsatte udvikling inden for touch-teknologi vil mulighederne for interaktion kun blive endnu større.
Hvis du vil læse andre artikler, der ligner Styr din iPhone med Touch Events, kan du besøge kategorien Teknologi.
