Magyar

Fedezze fel az érintési gesztusok világát és tanulja meg, hogyan implementálja őket JavaScript projektjeiben. Ez az útmutató mindent lefed az alapvető érintési eseményektől a fejlett gesztusfelismerési technikákig.

Érintési gesztusok: Átfogó útmutató a JavaScript implementációhoz

A mai mobilközpontú világban az érintési gesztusok a felhasználói élmény szerves részévé váltak. Az egyszerű koppintásoktól a bonyolult, többujjas interakciókig az érintési gesztusok természetes és intuitív módot biztosítanak a felhasználóknak a webalkalmazásokkal való interakcióra. Ez az átfogó útmutató feltárja az érintési gesztusok világát, és lépésről lépésre bemutatja, hogyan implementálhatja őket JavaScript projektjeiben.

Az érintési események megértése

Mielőtt belevágnánk a gesztusfelismerésbe, kulcsfontosságú megérteni azokat az alapvető érintési eseményeket, amelyek ezeket az interakciókat működtetik. A JavaScript események egy készletét biztosítja, amelyek akkor aktiválódnak, amikor a felhasználó megérinti a képernyőt. Ezek az események információt szolgáltatnak az érintésről, például annak helyéről és állapotáról.

Alapvető érintési események:

Ezen események mindegyike tartalmaz egy `touches` tulajdonságot, amely `Touch` objektumok listája. Minden `Touch` objektum egyetlen érintkezési pontot képvisel a képernyőn, és olyan információkat tartalmaz, mint:

Példa: Érintési koordináták naplózása

Ez az egyszerű példa bemutatja, hogyan naplózhatjuk egy érintési pont koordinátáit, amikor a felhasználó megérinti a képernyőt:


 document.addEventListener('touchstart', function(event) {
  event.preventDefault(); // Megakadályozza a böngésző alapértelmezett viselkedését (pl. görgetés)
  let touch = event.touches[0];
  console.log('Érintés kezdete X: ' + touch.clientX + ', Y: ' + touch.clientY);
 });

Megjegyzés: A `preventDefault()` metódust gyakran használják annak megakadályozására, hogy a böngésző végrehajtsa az alapértelmezett érintési viselkedését, mint például a görgetést vagy a nagyítást.

Alapvető gesztusok implementálása

Az érintési események alapos ismeretével most már implementálhatunk alapvető gesztusokat. Nézzünk példákat, mint a koppintás, a csúsztatás és a húzás. Ezeket először a definíciójukkal, majd JavaScript példákkal magyarázzuk el.

Koppintás (Tap) gesztus

A koppintás egy gyors érintés és elengedés a képernyőn. A koppintás gesztus implementálásához követnünk kell a `touchstart` és `touchend` eseményeket, és meg kell mérnünk a köztük eltelt időt. Ha az időeltérés egy bizonyos küszöbérték (pl. 200 ezredmásodperc) alatt van, akkor azt koppintásnak tekintjük.


 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('Koppintás észlelve!');
  }
 });

Csúsztatás (Swipe) gesztus

A csúsztatás egy gyors, irányított mozgás a képernyőn. A csúsztatás észleléséhez követnünk kell az érintés kezdő és végpozícióját, és ki kell számítanunk a mozgás távolságát és irányát. Figyelembe kell vennünk a csúsztatás időtartamát is.


 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) { // Szükség szerint módosítsa a küszöbértéket
   let angle = Math.atan2(deltaY, deltaX) * 180 / Math.PI;

   if (angle > -45 && angle <= 45) {
    console.log('Csúsztatás jobbra!');
   } else if (angle > 45 && angle <= 135) {
    console.log('Csúsztatás lefelé!');
   } else if (angle > 135 || angle <= -135) {
    console.log('Csúsztatás balra!');
   } else {
    console.log('Csúsztatás felfelé!');
   }
  }
 });

Húzás (Drag) gesztus

A húzás gesztus egy elem megérintését és a képernyőn való mozgatását jelenti. A húzás gesztus implementálásához követnünk kell a touchmove eseményt, és ennek megfelelően frissítenünk kell az elem pozícióját.


 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;
 });

Győződjön meg róla, hogy van egy "draggableElement" azonosítójú elem a HTML-ben:


 
Húzz engem!

Többérintéses gesztusok

A többérintéses gesztusok több ujj használatát jelentik a képernyővel való interakcióhoz. Ez lehetővé teszi a bonyolultabb és kifejezőbb interakciókat, mint például a csippentés a nagyításhoz és a forgatás.

Csippentés a nagyításhoz (Pinch-to-Zoom)

A csippentés a nagyításhoz egy gyakori gesztus, amelyet egy kép vagy térkép nagyítására és kicsinyítésére használnak. A csippentés implementálásához követnünk kell két érintési pont távolságát, és ennek megfelelően módosítanunk kell az elem méretarányát.


 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; // A méretezés halmozása
   element.style.transform = 'scale(' + currentScale + ')';
   initialDistance = currentDistance; // Visszaállítás a következő mozgáshoz
  }
 });

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

Győződjön meg róla, hogy van egy "zoomableImage" azonosítójú kép a HTML-ben:


 

Forgatás

A forgatás egy elem két ujjal történő elforgatását jelenti. A forgatás implementálásához követnünk kell a két érintési pont közötti szöget, és ennek megfelelően el kell forgatnunk az elemet.


 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; // A forgatás halmozása
   element.style.transform = 'rotate(' + currentRotation + 'deg)';
   initialAngle = currentAngle; // Visszaállítás a következő mozgáshoz
  }
 });

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

Győződjön meg róla, hogy van egy "rotatableImage" azonosítójú kép a HTML-ben:


 

Gesztusfelismerő könyvtárak

A bonyolult gesztusok nulláról történő implementálása kihívást jelentő és időigényes lehet. Szerencsére több JavaScript könyvtár is leegyszerűsítheti a gesztusfelismerés folyamatát. Ezek a könyvtárak előre elkészített gesztusfelismerőket és segédprogramokat biztosítanak az érintési események kezeléséhez.

Hammer.js

A Hammer.js egy népszerű JavaScript könyvtár a gesztusok felismerésére. Számos gesztust támogat, beleértve a koppintást, dupla koppintást, csúsztatást, csippentést, forgatást és pásztázást. Könnyű, egyszerűen használható és nagymértékben testreszabható. A Hammer.js úgy működik, hogy figyeli az érintési eseményeket, majd az érintési pontok helyzete és időtartama alapján meghatározza, hogy a felhasználó milyen műveletet hajt végre.


 // Illessze be a Hammer.js-t a HTML-be
 // 

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

 hammer.on('tap', function(event) {
  console.log('Koppintás esemény észlelve');
 });

 hammer.on('swipe', function(event) {
  console.log('Csúsztatás esemény észlelve');
  console.log('Csúsztatás iránya: ' + event.direction);
 });

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

 hammer.on('pinch', function(event) {
  console.log('Csippentés esemény észlelve');
  element.style.transform = 'scale(' + event.scale + ')';
 });

 hammer.on('rotate', function(event) {
  console.log('Forgatás esemény észlelve');
  element.style.transform = 'rotate(' + event.rotation + 'deg)';
 });

AlloyFinger

Az AlloyFinger egy másik népszerű JavaScript könyvtár, amely a gesztusfelismerésre specializálódott, különösen mobil eszközökön. Kis méretéről és jó teljesítményéről ismert. Olyan gyakori érintési gesztusokra összpontosít, mint a koppintás, csúsztatás, csippentés, forgatás és nyomás. Könnyen használható API-t biztosít a gesztusok elemekhez való kötéséhez.


 // Illessze be az AlloyFinger-t a HTML-be
 //  // Cserélje le az AlloyFinger elérési útjára

 let element = document.getElementById('myElement');
 let af = new AlloyFinger(element, {
  tap: function() {
   console.log('Koppintás esemény észlelve');
  },
  swipe: function(evt) {
   console.log('Csúsztatás esemény észlelve');
   console.log('Csúsztatás iránya: ' + evt.direction); // fel, le, balra, jobbra
  },
  pinch: function(evt) {
   console.log('Csippentés esemény észlelve');
   element.style.transform = 'scale(' + evt.scale + ')';
  },
  rotate: function(evt) {
   console.log('Forgatás esemény észlelve');
   element.style.transform = 'rotate(' + evt.angle + 'deg)';
  }
 });

Akadálymentesítési szempontok

Az érintési gesztusok implementálásakor elengedhetetlen figyelembe venni a fogyatékkal élő felhasználók akadálymentesítését. Néhány felhasználó motoros károsodások miatt nem tudja használni az érintési gesztusokat. Alternatív beviteli módszerek, mint például a billentyűzetvezérlés vagy a hangutasítások biztosítása gondoskodik arról, hogy az alkalmazása szélesebb közönség számára is elérhető legyen.

Teljesítményoptimalizálás

Az érintési események számításigényesek lehetnek, különösen bonyolult gesztusok kezelésekor. A kód teljesítményoptimalizálása kulcsfontosságú a zökkenőmentes és reszponzív felhasználói élmény biztosításához.

Böngészők közötti kompatibilitás

Az érintési események támogatása böngészőnként és eszközönként eltérő. Kulcsfontosságú, hogy a kódját különféle böngészőkön és eszközökön tesztelje a böngészők közötti kompatibilitás biztosítása érdekében. Fontolja meg polyfill-ek vagy olyan könyvtárak használatát, amelyek elvonatkoztatják a böngészők közötti különbségeket.

Nemzetköziesítési (i18n) szempontok

Az érintési gesztusok implementálásakor ne feledkezzen meg a nemzetköziesítésről (i18n). Bár maguk az érintési interakciók általában nyelvfüggetlenek, a környező UI elemeket és visszajelzési mechanizmusokat lokalizálni kell a különböző nyelvekre és régiókra.

Globális példák és megfontolások

Nézzük meg, hogyan alkalmazhatók az érintési gesztusok különbözőképpen a globális kontextusokban:

Következtetés

Az érintési gesztusok hatékony eszközei a lebilincselő és intuitív felhasználói élmények létrehozásának. Az alapul szolgáló érintési események megértésével és a megfelelő gesztusfelismerési technikák alkalmazásával a gesztusok széles skáláját implementálhatja JavaScript projektjeiben. Ne felejtse el figyelembe venni az akadálymentesítést, a teljesítményt és a böngészők közötti kompatibilitást, hogy alkalmazása minden felhasználó számára jól működjön. Ahogy a technológia fejlődik, számíthatunk új típusú gesztusok és interakciók megjelenésére; tanuljon folyamatosan, hogy a digitális élmények élvonalában maradjon.