Eesti

Avastage puutežestide maailma ja õppige, kuidas neid oma JavaScripti projektides rakendada. See juhend hõlmab kõike alates põhilistest puutesündmustest kuni täiustatud žestituvastustehnikateni.

Puutežestid: põhjalik juhend JavaScriptis rakendamiseks

Tänapäeva mobiilikeskses maailmas on puutežestid saanud kasutajakogemuse lahutamatuks osaks. Alates lihtsatest toksatustest kuni keerukate mitme sõrme interaktsioonideni pakuvad puutežestid kasutajatele loomulikku ja intuitiivset viisi veebirakendustega suhtlemiseks. See põhjalik juhend uurib puutežestide maailma ja pakub samm-sammulist lähenemist nende rakendamiseks teie JavaScripti projektides.

Puutesündmuste mõistmine

Enne žestituvastusse sukeldumist on oluline mõista neid interaktsioone võimaldavaid aluseks olevaid puutesündmusi. JavaScript pakub sündmuste kogumit, mis käivituvad, kui kasutaja ekraani puudutab. Need sündmused annavad teavet puudutuse kohta, näiteks selle asukoha ja oleku.

Põhilised puutesündmused:

Kõik need sündmused sisaldavad `touches` omadust, mis on `Touch` objektide loend. Iga `Touch` objekt esindab ühte kontaktpunkti ekraanil ja sisaldab teavet nagu:

Näide: Puutekoordinaatide logimine

See lihtne näide demonstreerib, kuidas logida puutepunkti koordinaate, kui kasutaja puudutab ekraani:


 document.addEventListener('touchstart', function(event) {
  event.preventDefault(); // Hoiab ära brauseri vaikimisi käitumise (nt kerimise)
  let touch = event.touches[0];
  console.log('Puudutus algas X: ' + touch.clientX + ', Y: ' + touch.clientY);
 });

Märkus: `preventDefault()` meetodit kasutatakse sageli selleks, et takistada brauseril vaikimisi puutekäitumise (nagu kerimine või suumimine) sooritamist.

Põhižestide rakendamine

Omades kindlat arusaama puutesündmustest, saame nüüd rakendada põhilisi žeste. Vaatame näiteid nagu toksatus, libistamine ja lohistamine. Neid selgitatakse, defineerides esmalt, mis need on, ja seejärel pakkudes JavaScripti näiteid.

Toksatusžest

Toksatusžest on kiire puudutus ja vabastamine ekraanil. Toksatusžesti rakendamiseks saame jälgida `touchstart` ja `touchend` sündmusi ning mõõta nendevahelist aega. Kui ajavahe on alla teatud läve (nt 200 millisekundit), peame seda toksatuseks.


 let tapStartTime = null;

 document.addEventListener('touchstart', function(event) {
  tapStartTime = new Date().getTime();
 });

 document.addEventListener('touchend', function(event) {
  let tapEndTime = new Date().getTime();
  let tapDuration = tapEndTime - tapStartTime;

  if (tapDuration < 200) {
   console.log('Toksatus tuvastatud!');
  }
 });

Libistamisžest

Libistamisžest on kiire, suunatud liikumine üle ekraani. Libistamise tuvastamiseks peame jälgima puudutuse algus- ja lõppasendit ning arvutama liikumise kauguse ja suuna. Samuti peame arvestama libistamise kestusega.


 let swipeStartX = null;
 let swipeStartY = null;

 document.addEventListener('touchstart', function(event) {
  swipeStartX = event.touches[0].clientX;
  swipeStartY = event.touches[0].clientY;
 });

 document.addEventListener('touchend', function(event) {
  let swipeEndX = event.changedTouches[0].clientX;
  let swipeEndY = event.changedTouches[0].clientY;
  let deltaX = swipeEndX - swipeStartX;
  let deltaY = swipeEndY - swipeStartY;
  let swipeDistance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);

  if (swipeDistance > 50) { // Vajadusel kohandage läve
   let angle = Math.atan2(deltaY, deltaX) * 180 / Math.PI;

   if (angle > -45 && angle <= 45) {
    console.log('Libistamine paremale!');
   } else if (angle > 45 && angle <= 135) {
    console.log('Libistamine alla!');
   } else if (angle > 135 || angle <= -135) {
    console.log('Libistamine vasakule!');
   } else {
    console.log('Libistamine üles!');
   }
  }
 });

Lohistamisžest

Lohistamisžest hõlmab elemendi puudutamist ja selle liigutamist üle ekraani. Lohistamisžesti rakendamiseks peame jälgima `touchmove` sündmust ja vastavalt uuendama elemendi asukohta.


 let dragging = false;
 let offsetX, offsetY;
 let element = document.getElementById('draggableElement');

 element.addEventListener('touchstart', function(event) {
  dragging = true;
  offsetX = event.touches[0].clientX - element.offsetLeft;
  offsetY = event.touches[0].clientY - element.offsetTop;
 });

 document.addEventListener('touchmove', function(event) {
  if (dragging) {
   element.style.left = (event.touches[0].clientX - offsetX) + 'px';
   element.style.top = (event.touches[0].clientY - offsetY) + 'px';
  }
 });

 document.addEventListener('touchend', function(event) {
  dragging = false;
 });

Veenduge, et teie HTML-is oleks element ID-ga "draggableElement":


 
Lohista mind!

Mitmikpuutežestid

Mitmikpuutežestid hõlmavad mitme sõrme kasutamist ekraaniga suhtlemiseks. See võimaldab keerukamaid ja väljendusrikkamaid interaktsioone, nagu näpistamine suumimiseks ja pööramine.

Näpistamine suumimiseks (Pinch-to-Zoom)

Näpistamine suumimiseks on tavaline žest, mida kasutatakse pildi või kaardi sisse ja välja suumimiseks. Näpistamise rakendamiseks peame jälgima kahe puutepunkti vahelist kaugust ja vastavalt kohandama elemendi skaalat.


 let initialDistance = null;
 let currentScale = 1;
 let element = document.getElementById('zoomableImage');

 function getDistance(event) {
  let touch1 = event.touches[0];
  let touch2 = event.touches[1];
  let x = touch2.clientX - touch1.clientX;
  let y = touch2.clientY - touch1.clientY;
  return Math.sqrt(x * x + y * y);
 }

 element.addEventListener('touchstart', function(event) {
  if (event.touches.length === 2) {
   initialDistance = getDistance(event);
  }
 });

 element.addEventListener('touchmove', function(event) {
  if (event.touches.length === 2) {
   event.preventDefault();
   let currentDistance = getDistance(event);
   let scaleFactor = currentDistance / initialDistance;
   currentScale *= scaleFactor; // Akumuleeri skaleerimine
   element.style.transform = 'scale(' + currentScale + ')';
   initialDistance = currentDistance; // Lähtesta järgmise liikumise jaoks
  }
 });

 element.addEventListener('touchend', function(event) {
  initialDistance = null;
 });

Veenduge, et teie HTML-is oleks pilt ID-ga "zoomableImage":


 

Pööramine

Pööramine hõlmab elemendi pööramist kahe sõrmega. Pööramise rakendamiseks peame jälgima kahe puutepunkti vahelist nurka ja vastavalt pöörama elementi.


 let initialAngle = null;
 let currentRotation = 0;
 let element = document.getElementById('rotatableImage');

 function getAngle(event) {
  let touch1 = event.touches[0];
  let touch2 = event.touches[1];
  return Math.atan2(touch2.clientY - touch1.clientY, touch2.clientX - touch1.clientX) * 180 / Math.PI;
 }

 element.addEventListener('touchstart', function(event) {
  if (event.touches.length === 2) {
   initialAngle = getAngle(event);
  }
 });

 element.addEventListener('touchmove', function(event) {
  if (event.touches.length === 2) {
   event.preventDefault();
   let currentAngle = getAngle(event);
   let rotation = currentAngle - initialAngle;
   currentRotation += rotation; // Akumuleeri pööramine
   element.style.transform = 'rotate(' + currentRotation + 'deg)';
   initialAngle = currentAngle; // Lähtesta järgmise liikumise jaoks
  }
 });

 element.addEventListener('touchend', function(event) {
  initialAngle = null;
 });

Veenduge, et teie HTML-is oleks pilt ID-ga "rotatableImage":


 

Žestituvastuse teegid

Keerukate žestide nullist rakendamine võib olla keeruline ja aeganõudev. Õnneks on mitmeid JavaScripti teeke, mis võivad žestituvastuse protsessi lihtsustada. Need teegid pakuvad eelnevalt ehitatud žestituvastajaid ja utiliite puutesündmuste käsitlemiseks.

Hammer.js

Hammer.js on populaarne JavaScripti teek žestide tuvastamiseks. See toetab laia valikut žeste, sealhulgas toksatus, topelttoksatus, libistamine, näpistamine, pööramine ja panoraamimine. See on kerge, lihtne kasutada ja väga kohandatav. Hammer.js töötab, kuulates puutesündmusi ja seejärel määrates puutepunktide asukoha ja kestuse põhjal, millist toimingut kasutaja sooritab.


 // Kaasake Hammer.js oma HTML-i
 // 

 let element = document.getElementById('myElement');
 let hammer = new Hammer(element);

 hammer.on('tap', function(event) {
  console.log('Toksatuse sündmus tuvastatud');
 });

 hammer.on('swipe', function(event) {
  console.log('Libistamise sündmus tuvastatud');
  console.log('Libistamise suund: ' + event.direction);
 });

 hammer.get('pinch').set({ enable: true });
 hammer.get('rotate').set({ enable: true });

 hammer.on('pinch', function(event) {
  console.log('Näpistamise sündmus tuvastatud');
  element.style.transform = 'scale(' + event.scale + ')';
 });

 hammer.on('rotate', function(event) {
  console.log('Pööramise sündmus tuvastatud');
  element.style.transform = 'rotate(' + event.rotation + 'deg)';
 });

AlloyFinger

AlloyFinger on veel üks populaarne JavaScripti teek, mis on spetsialiseerunud žestituvastusele, eriti mobiilseadmete jaoks. See on tuntud oma väiksuse ja hea jõudluse poolest. See keskendub tavalistele puutežestidele nagu toksatus, libistamine, näpistamine, pööramine ja vajutamine. See pakub lihtsasti kasutatavat API-d žestide sidumiseks elementidega.


 // Kaasake AlloyFinger oma HTML-i
 //  // Asendage oma AlloyFingeri teega

 let element = document.getElementById('myElement');
 let af = new AlloyFinger(element, {
  tap: function() {
   console.log('Toksatuse sündmus tuvastatud');
  },
  swipe: function(evt) {
   console.log('Libistamise sündmus tuvastatud');
   console.log('Libistamise suund: ' + evt.direction); // üles, alla, vasakule, paremale
  },
  pinch: function(evt) {
   console.log('Näpistamise sündmus tuvastatud');
   element.style.transform = 'scale(' + evt.scale + ')';
  },
  rotate: function(evt) {
   console.log('Pööramise sündmus tuvastatud');
   element.style.transform = 'rotate(' + evt.angle + 'deg)';
  }
 });

Juurdepääsetavuse kaalutlused

Puutežestide rakendamisel on oluline arvestada puuetega kasutajate juurdepääsetavusega. Mõned kasutajad ei pruugi motoorsete häirete tõttu puutežeste kasutada. Alternatiivsete sisestusmeetodite, näiteks klaviatuuri juhtnuppude või häälkäskluste pakkumine tagab, et teie rakendus on kättesaadav laiemale publikule.

Jõudluse optimeerimine

Puutesündmused võivad olla arvutuslikult kulukad, eriti keerukate žestide käsitlemisel. Koodi jõudluse optimeerimine on sujuva ja reageeriva kasutajakogemuse tagamiseks ülioluline.

Brauseriülene ühilduvus

Puutesündmuste tugi varieerub erinevates brauserites ja seadmetes. Brauseriülese ühilduvuse tagamiseks on ülioluline testida oma koodi erinevates brauserites ja seadmetes. Kaaluge polüfillide või teekide kasutamist, mis abstraheerivad brauserite erinevusi.

Rahvusvahelistamise (i18n) kaalutlused

Puutežestide rakendamisel ärge unustage arvestada rahvusvahelistamisega (i18n). Kuigi puuteinteraktsioonid ise on üldiselt keele-agnostilised, peaksid ümbritsevad kasutajaliidese elemendid ja tagasisidemehhanismid olema lokaliseeritud erinevate keelte ja piirkondade jaoks.

Globaalsed näited ja kaalutlused

Vaatame, kuidas puutežeste võidakse erinevates globaalsetes kontekstides erinevalt rakendada:

Kokkuvõte

Puutežestid on võimas tööriist kaasahaaravate ja intuitiivsete kasutajakogemuste loomiseks. Mõistes aluseks olevaid puutesündmusi ja kasutades sobivaid žestituvastustehnikaid, saate oma JavaScripti projektides rakendada laia valikut žeste. Ärge unustage arvestada juurdepääsetavuse, jõudluse ja brauseriülese ühilduvusega, et tagada teie rakenduse hea toimimine kõigi kasutajate jaoks. Tehnoloogia arenedes oodake uut tüüpi žestide ja interaktsioonide tekkimist, jätkake õppimist, et püsida digitaalsete kogemuste esirinnas.