What is a touch event object?

Forstå Touch Events på iPhone

24/05/2024

Rating: 4.3 (1611 votes)
Indholdsfortegnelse

iPhone og Touch Events: En Dybdegående Guide

I en verden domineret af smartphones er berøringsskærmen blevet vores primære grænseflade. Uanset om du bruger en iPhone eller en anden moderne mobiltelefon, interagerer du konstant med enheder, der forstår og reagerer på dine berøringer. Men hvad sker der egentlig, når du trykker på skærmen? Dette er kernen i det, vi kalder touch events. Denne artikel vil dykke ned i, hvad touch events er, hvordan de fungerer, og hvordan de muliggør de intuitive og dynamiske brugeroplevelser, vi forventer af vores iPhones.

Can microinteractions make your mobile app addictive?
Microinteractions have the power to make your mobile app truly addictive — learn how they can take your app to the next level. Microinteractions are often the unsung heroes of great mobile UX design. As a user, we don’t always realize when a microinteraction has taken place but at an unconscious level we do appreciate it!

Hvad er et Touch Event?

Grundlæggende er et touch event en registrering af kontakt med en overflade, typisk en berøringsskærm. Denne kontakt kan komme fra en finger, en stylus eller endda andre dele af kroppen, selvom fingre er den mest almindelige form for interaktion. Når du rører ved din iPhone, genererer enheden en række begivenheder, som operativsystemet og apps kan fortolke. Disse begivenheder giver information om, hvor berøringen skete, hvornår den skete, og hvordan den udvikler sig over tid.

Forestil dig, at du tegner på din iPhone. Hvert tryk, hver bevægelse og hvert slip af din finger udløser specifikke touch events. Disse events er byggestenene for al touch-baseret interaktion.

De Vigtigste Komponenter i Touch Events

For at forstå touch events fuldt ud, er det vigtigt at kende de centrale begreber:

  • Touch (Berøring): Repræsenterer et enkelt kontaktpunkt med skærmen. Dette kan være en finger eller en stylus. Hver berøring har en unik identifikator, der forbliver den samme, så længe kontakten varer.
  • TouchEvent (Touch Begivenhed): En samling af flere berøringer. Dette er relevant, når brugeren anvender flere fingre samtidigt, for eksempel ved pinch-to-zoom eller multi-finger gestus.
  • TouchEvent Interface: Selve begivenheden, der opstår, når tilstanden af berøringer på skærmen ændrer sig. Dette interface giver adgang til information om alle aktive berøringer.

Det er vigtigt at bemærke, at selvom vi ofte taler om "fingre", kan teknologien bag touch events også omfatte brug af en stylus eller andre kontaktmetoder.

Et Praktisk Eksempel: Tegning på en Canvas

Lad os se på et konkret eksempel, der illustrerer, hvordan touch events bruges. Forestil dig en simpel webapplikation, der lader dig tegne på en element på din iPhone. Denne applikation ville typisk følge en struktur som denne:

Opsætning af Event Listeners

Når siden indlæses, initialiseres applikationen ved at opsætte 'event listeners' for -elementet. Disse listeners "lytter" efter specifikke touch events og kalder de relevante funktioner, når de opstår.

document.addEventListener("DOMContentLoaded", startup); function startup() { const el = document.getElementById("canvas"); el.addEventListener("touchstart", handleStart); el.addEventListener("touchend", handleEnd); el.addEventListener("touchcancel", handleCancel); el.addEventListener("touchmove", handleMove); log("Initialized."); } 

Her opsættes fire centrale event listeners:

  • touchstart: Udløses, når en ny berøring starter.
  • touchend: Udløses, når en berøring afsluttes (fingeren løftes).
  • touchcancel: Udløses, hvis en berøring afbrydes (f.eks. hvis brugeren bevæger fingeren ind i et UI-element).
  • touchmove: Udløses, når en eller flere berøringer bevæger sig på skærmen.

Sporing af Nye Berøringer (touchstart)

Når en bruger rører skærmen for første gang, kaldes handleStart funktionen. Denne funktion registrerer den nye berøring, gemmer dens startposition og tegner et lille punkt for at markere starten på tegningen.

const ongoingTouches = []; function handleStart(evt) { evt.preventDefault(); // Forhindrer standard browseradfærd log("touchstart."); const el = document.getElementById("canvas"); const ctx = el.getContext("2d"); const touches = evt.changedTouches; // Henter de berøringer, der har ændret sig for (let i = 0; i < touches.length; i++) { const touch = touches[i]; log(`touchstart: ${i}.`); ongoingTouches.push(copyTouch(touch)); // Gemmer berøringen const color = colorForTouch(touch); // Vælger en farve log(`color of touch with id ${touch.identifier} = ${color}`); ctx.beginPath(); ctx.arc(touch.pageX, touch.pageY, 4, 0, 2 * Math.PI, false); // Tegner en cirkel ctx.fillStyle = color; ctx.fill(); } } 

evt.preventDefault() er afgørende her, da det forhindrer browseren i at udføre standardhandlinger, som f.eks. at forsøge at fortolke berøringen som en musebegivenhed. `changedTouches` er en liste over de `Touch` objekter, der er involveret i den aktuelle begivenhed.

Tegning under Bevægelse (touchmove)

Når brugeren bevæger en finger på skærmen, udløses touchmove eventen, og handleMove funktionen kaldes. Denne funktion tegner en linje fra den forrige position til den nuværende position for hver berøring.

function handleMove(evt) { evt.preventDefault(); const el = document.getElementById("canvas"); const ctx = el.getContext("2d"); const touches = evt.changedTouches; for (const touch of touches) { const color = colorForTouch(touch); const idx = ongoingTouchIndexById(touch.identifier); if (idx >= 0) { log(`continuing touch ${idx}`); ctx.beginPath(); log(`ctx.moveTo( ${ongoingTouches[idx].pageX}, ${ongoingTouches[idx].pageY} );`); ctx.moveTo(ongoingTouches[idx].pageX, ongoingTouches[idx].pageY); // Går til forrige position log(`ctx.lineTo( ${touch.pageX}, ${touch.pageY} );`); ctx.lineTo(touch.pageX, touch.pageY); // Tegner til nuværende position ctx.lineWidth = 4; ctx.strokeStyle = color; ctx.stroke(); ongoingTouches.splice(idx, 1, copyTouch(touch)); // Opdaterer gemt berøring } else { log("can't figure out which touch to continue"); } } } 

For at kunne tegne en ubrudt linje, gemmes hver aktive berøring i et array kaldet `ongoingTouches`. Når en touchmove begivenhed modtages, bruges berøringens unikke `identifier` til at finde den tilsvarende post i `ongoingTouches` arrayet. Dette giver mulighed for at hente den forrige position og tegne en linjesegment derfra.

Afslutning af en Berøring (touchend)

Når brugeren løfter fingeren, udløses touchend eventen, og handleEnd funktionen kaldes. Denne funktion tegner det sidste linjesegment og fjerner berøringen fra listen over aktive berøringer.

function handleEnd(evt) { evt.preventDefault(); log("touchend"); const el = document.getElementById("canvas"); const ctx = el.getContext("2d"); const touches = evt.changedTouches; for (const touch of touches) { const color = colorForTouch(touch); let idx = ongoingTouchIndexById(touch.identifier); if (idx >= 0) { ctx.lineWidth = 4; ctx.fillStyle = color; ctx.beginPath(); ctx.moveTo(ongoingTouches[idx].pageX, ongoingTouches[idx].pageY); ctx.lineTo(touch.pageX, touch.pageY); ctx.fillRect(touch.pageX - 4, touch.pageY - 4, 8, 8); // Tegner et lille kvadrat ved enden ongoingTouches.splice(idx, 1); // Fjerner berøringen fra listen } else { log("can't figure out which touch to end"); } } } 

Som en lille markering tegnes der også et lille kvadrat ved slutpunktet for berøringen, før den fjernes fra `ongoingTouches`.

Håndtering af Afbrudte Berøringer (touchcancel)

Hvis en berøring af en eller anden grund afbrydes (f.eks. hvis systemet modtager et opkald, eller fingeren bevæger sig ind i et område, der blokerer for input), udløses touchcancel eventen. handleCancel funktionen fjerner simpelthen den pågældende berøring fra listen over aktive berøringer uden at tegne et afsluttende punkt.

function handleCancel(evt) { evt.preventDefault(); log("touchcancel."); const touches = evt.changedTouches; for (const touch of touches) { let idx = ongoingTouchIndexById(touches[i].identifier); ongoingTouches.splice(idx, 1); // Fjerner berøringen øjeblikkeligt } } 

Touch Events vs. Mouse Events

På enheder som iPhones er touch events primære. Dog, for webindhold, der oprindeligt er designet til mus, kan browsere sende både touch events og mouse events for den samme handling. Ved at kalde evt.preventDefault() i touch event handlers, sikrer man, at kun touch events behandles, hvilket forhindrer uønsket dobbeltregistrering eller konflikter.

Brugen af Touch Events i Apps

Ud over simpel tegning bruges touch events i utallige applikationer:

  • Spil: Styr karakterer, udfør handlinger og naviger i spilverdenen via touch input.
  • Grafiske Redigeringsprogrammer: Avanceret manipulation af billeder og designelementer.
  • Kort og Navigation: Zoom, panorering og interaktion med kortdata.
  • Sociale Medier: Scrolling, likes, deling og andre interaktioner.
  • Produktivitetsapps: Tekstredigering, filhåndtering og mere.

Mulighederne er næsten uendelige, og udviklere bruger konstant touch events til at skabe mere engagerende og intuitive brugeroplevelser.

Sammenligning af Touch Event Objekter

Her er en oversigt over de vigtigste egenskaber ved et `Touch` objekt:

EgenskabBeskrivelse
identifierEn unik ID for denne berøring. Forbliver den samme for en given berøring, så længe den varer.
targetDet element, som berøringen oprindeligt startede på.
pageX, pageYDe X- og Y-koordinater for berøringen i forhold til hele dokumentet.
clientX, clientYDe X- og Y-koordinater for berøringen i forhold til viewportet (synligt område).
screenX, screenYDe X- og Y-koordinater for berøringen i forhold til skærmen.

Ofte Stillede Spørgsmål om Touch Events

Hvad er forskellen på `changedTouches`, `targetTouches` og `touches`?

changedTouches: Indeholder den liste af `Touch` objekter, der blev tilføjet, fjernet eller ændret i den aktuelle `TouchEvent`. Ved `touchstart` indeholder den de nye berøringer, ved `touchmove` dem, der er flyttet, og ved `touchend` dem, der er afsluttet.

targetTouches: Indeholder den liste af `Touch` objekter, der er på det element, som er target for den aktuelle `TouchEvent`. Alle berøringer på elementet vil være i denne liste.

touches: Indeholder den liste af alle `Touch` objekter, der i øjeblikket er i kontakt med overfladen, uanset hvilket element de er på.

Hvordan kan jeg detektere en dobbelt-tryk gestus?

Dobbelt-tryk er en kombination af flere `touchstart` og `touchend` events inden for en kort tidsramme. Du kan implementere logik til at tælle disse events og udløse en handling, hvis to tryk registreres hurtigt efter hinanden.

Hvorfor er `preventDefault()` vigtig?

Det forhindrer browserens standardadfærd for touch-input, som kan omfatte scrolling, zoomning eller at sende samtidige muse-events. Dette giver dig fuld kontrol over, hvordan din app reagerer på berøringer.

Konklusion

Touch events er fundamentale for moderne mobilinteraktion. Ved at forstå hvordan din iPhone registrerer og behandler berøringer, får du en dybere indsigt i den teknologi, der driver din daglige brug af enheden. Fra de simple `touchstart` og `touchend` events til mere komplekse `touchmove` sekvenser, giver disse mekanismer udviklere mulighed for at skabe rige og responsive brugeroplevelser. Uanset om du er en udvikler, der ønsker at bygge den næste store app, eller blot en nysgerrig bruger, er kendskab til touch events nøglen til at forstå den interaktive verden på din iPhone.

Hvis du vil læse andre artikler, der ligner Forstå Touch Events på iPhone, kan du besøge kategorien Teknologi.

Go up