Suomi

Tutustu kosketuseleiden maailmaan ja opi niiden toteutus JavaScript-projekteissasi. Tämä opas kattaa kaiken perustason kosketustapahtumista edistyneisiin eleentunnistustekniikoihin.

Kosketuseleet: Kattava opas JavaScript-toteutukseen

Nykypäivän mobiilikeskeisessä maailmassa kosketuseleistä on tullut olennainen osa käyttäjäkokemusta. Yksinkertaisista napautuksista monimutkaisiin usean sormen vuorovaikutuksiin, kosketuseleet tarjoavat käyttäjille luonnollisen ja intuitiivisen tavan olla vuorovaikutuksessa verkkosovellusten kanssa. Tämä kattava opas tutustuu kosketuseleiden maailmaan ja tarjoaa askel-askeleelta lähestymistavan niiden toteuttamiseen JavaScript-projekteissasi.

Kosketustapahtumien ymmärtäminen

Ennen kuin syvennytään eleentunnistukseen, on ratkaisevan tärkeää ymmärtää taustalla olevat kosketustapahtumat, jotka näitä vuorovaikutuksia ohjaavat. JavaScript tarjoaa joukon tapahtumia, jotka laukeavat, kun käyttäjä koskettaa näyttöä. Nämä tapahtumat antavat tietoa kosketuksesta, kuten sen sijainnin ja tilan.

Peruskosketustapahtumat:

Jokainen näistä tapahtumista sisältää `touches`-ominaisuuden, joka on lista `Touch`-objekteja. Jokainen `Touch`-objekti edustaa yhtä kosketuskohtaa näytöllä ja sisältää tietoja, kuten:

Esimerkki: Kosketuskoordinaattien kirjaaminen

Tämä yksinkertainen esimerkki näyttää, kuinka kosketuspisteen koordinaatit kirjataan, kun käyttäjä koskettaa näyttöä:


 document.addEventListener('touchstart', function(event) {
  event.preventDefault(); // Prevents default browser behavior (e.g., scrolling)
  let touch = event.touches[0];
  console.log('Touch started at X: ' + touch.clientX + ', Y: ' + touch.clientY);
 });

Huomautus: `preventDefault()`-metodia käytetään usein estämään selaimen oletustoimintoja kosketukselle, kuten vieritystä tai zoomausta.

Peruseleiden toteuttaminen

Kun kosketustapahtumat on ymmärretty vankasti, voimme nyt toteuttaa peruseleitä. Tarkastellaan esimerkkejä, kuten napautus, pyyhkäisy ja raahaus. Nämä selitetään ensin määrittelemällä, mitä ne ovat, ja sitten tarjoamalla JavaScript-esimerkkejä.

Napautusele (Tap)

Napautusele on nopea kosketus ja vapautus näytöllä. Napautuseleen toteuttamiseksi voimme seurata `touchstart`- ja `touchend`-tapahtumia ja mitata niiden välistä aikaeroa. Jos aikaero on tietyn kynnyksen alapuolella (esim. 200 millisekuntia), pidämme sitä napautuksena.


 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('Tap detected!');
  }
 });

Pyyhkäisyele (Swipe)

Pyyhkäisyele on nopea, suunnattu liike näytön poikki. Pyyhkäisyn tunnistamiseksi meidän on seurattava kosketuksen alku- ja loppupisteitä ja laskettava liikkeen etäisyys ja suunta. Meidän on myös otettava huomioon pyyhkäisyn kesto.


 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) { // Adjust the threshold as needed
   let angle = Math.atan2(deltaY, deltaX) * 180 / Math.PI;

   if (angle > -45 && angle <= 45) {
    console.log('Swipe right!');
   } else if (angle > 45 && angle <= 135) {
    console.log('Swipe down!');
   } else if (angle > 135 || angle <= -135) {
    console.log('Swipe left!');
   } else {
    console.log('Swipe up!');
   }
  }
 });

Raahausele (Drag)

Raahauseleeseen kuuluu elementin koskettaminen ja sen siirtäminen näytön poikki. Raahauseleen toteuttamiseksi meidän on seurattava `touchmove`-tapahtumaa ja päivitettävä elementin sijaintia sen mukaisesti.


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

Varmista, että HTML-koodissasi on elementti, jonka id on "draggableElement":


 
Drag Me!

Monikosketuseleet

Monikosketuseleet sisältävät useiden sormien käytön vuorovaikutuksessa näytön kanssa. Tämä mahdollistaa monimutkaisempia ja ilmaisuvoimaisempia vuorovaikutuksia, kuten nipistyszoomauksen ja kierron.

Nipistyszoomaus (Pinch-to-Zoom)

Nipistyszoomaus on yleinen ele, jota käytetään kuvan tai kartan lähentämiseen ja loitontamiseen. Nipistyszoomauksen toteuttamiseksi meidän on seurattava kahden kosketuspisteen välistä etäisyyttä ja säädettävä elementin mittakaavaa sen mukaisesti.


 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; // Accumulate scaling
   element.style.transform = 'scale(' + currentScale + ')';
   initialDistance = currentDistance; // Reset for next movement
  }
 });

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

Varmista, että HTML-koodissasi on kuva, jonka id on "zoomableImage":


 

Kiertoele (Rotation)

Kiertoeleeseen kuuluu elementin kiertäminen kahdella sormella. Kiertoeleen toteuttamiseksi meidän on seurattava kahden kosketuspisteen välistä kulmaa ja kierrettävä elementtiä sen mukaisesti.


 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; // Accumulate rotation
   element.style.transform = 'rotate(' + currentRotation + 'deg)';
   initialAngle = currentAngle; // Reset for next movement
  }
 });

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

Varmista, että HTML-koodissasi on kuva, jonka id on "rotatableImage":


 

Eleentunnistuskirjastot

Monimutkaisten eleiden toteuttaminen tyhjästä voi olla haastavaa ja aikaa vievää. Onneksi useat JavaScript-kirjastot voivat yksinkertaistaa eleentunnistusprosessia. Nämä kirjastot tarjoavat valmiita eleentunnistimia ja apuohjelmia kosketustapahtumien käsittelyyn.

Hammer.js

Hammer.js on suosittu JavaScript-kirjasto eleiden tunnistamiseen. Se tukee laajaa valikoimaa eleitä, mukaan lukien napautus, kaksoisnapautus, pyyhkäisy, nipistys, kierto ja panorointi. Se on kevyt, helppokäyttöinen ja erittäin muokattavissa. Hammer.js toimii kuuntelemalla kosketustapahtumia ja määrittämällä sitten käyttäjän suorittaman toiminnon kosketuspisteiden sijainnin ja keston perusteella.


 // Include Hammer.js in your HTML
 // 

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

 hammer.on('tap', function(event) {
  console.log('Tap event detected');
 });

 hammer.on('swipe', function(event) {
  console.log('Swipe event detected');
  console.log('Swipe direction: ' + event.direction);
 });

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

 hammer.on('pinch', function(event) {
  console.log('Pinch event detected');
  element.style.transform = 'scale(' + event.scale + ')';
 });

 hammer.on('rotate', function(event) {
  console.log('Rotate event detected');
  element.style.transform = 'rotate(' + event.rotation + 'deg)';
 });

AlloyFinger

AlloyFinger on toinen suosittu JavaScript-kirjasto, joka on erikoistunut eleentunnistukseen erityisesti mobiililaitteille. Se tunnetaan pienestä koostaan ja hyvästä suorituskyvystään. Se keskittyy yleisiin kosketuseleisiin, kuten napautukseen, pyyhkäisyyn, nipistykseen, kiertoon ja painallukseen. Se tarjoaa helppokäyttöisen API:n eleiden sitomiseen elementteihin.


 // Include AlloyFinger in your HTML
 //  // Replace with your AlloyFinger path

 let element = document.getElementById('myElement');
 let af = new AlloyFinger(element, {
  tap: function() {
   console.log('Tap event detected');
  },
  swipe: function(evt) {
   console.log('Swipe event detected');
   console.log('Swipe direction: ' + evt.direction); // up, down, left, right
  },
  pinch: function(evt) {
   console.log('Pinch event detected');
   element.style.transform = 'scale(' + evt.scale + ')';
  },
  rotate: function(evt) {
   console.log('Rotate event detected');
   element.style.transform = 'rotate(' + evt.angle + 'deg)';
  }
 });

Saavutettavuusnäkökohdat

Kun toteutat kosketuseleitä, on olennaista ottaa huomioon saavutettavuus vammaisille käyttäjille. Jotkut käyttäjät eivät ehkä pysty käyttämään kosketuseleitä motoristen rajoitteiden vuoksi. Tarjoamalla vaihtoehtoisia syöttötapoja, kuten näppäimistöohjaimia tai äänikomentoja, varmistetaan, että sovelluksesi on saavutettavissa laajemmalle yleisölle.

Suorituskyvyn optimointi

Kosketustapahtumat voivat olla laskennallisesti raskaita, erityisesti käsiteltäessä monimutkaisia eleitä. Koodin optimointi suorituskyvyn kannalta on ratkaisevan tärkeää sujuvan ja reagoivan käyttäjäkokemuksen varmistamiseksi.

Selainten välinen yhteensopivuus

Kosketustapahtumien tuki vaihtelee eri selaimissa ja laitteissa. On ratkaisevan tärkeää testata koodisi useilla eri selaimilla ja laitteilla varmistaaksesi selainten välisen yhteensopivuuden. Harkitse polyfillien tai kirjastojen käyttöä, jotka abstrahoivat selainten väliset erot.

Kansainvälistämisen (i18n) näkökohdat

Kun toteutat kosketuseleitä, muista ottaa huomioon kansainvälistäminen (i18n). Vaikka kosketusvuorovaikutukset itsessään ovat yleensä kielestä riippumattomia, ympäröivät käyttöliittymäelementit ja palautejärjestelmät tulisi lokalisoida eri kielille ja alueille.

Globaalit esimerkit ja näkökohdat

Tarkastellaan, miten kosketuseleitä voidaan soveltaa eri tavoin erilaisissa globaaleissa konteksteissa:

Yhteenveto

Kosketuseleet ovat tehokas työkalu mukaansatempaavien ja intuitiivisten käyttäjäkokemusten luomiseen. Ymmärtämällä taustalla olevat kosketustapahtumat ja käyttämällä sopivia eleentunnistustekniikoita voit toteuttaa laajan valikoiman eleitä JavaScript-projekteissasi. Muista ottaa huomioon saavutettavuus, suorituskyky ja selainten välinen yhteensopivuus varmistaaksesi, että sovelluksesi toimii hyvin kaikille käyttäjille. Teknologian kehittyessä on odotettavissa uudenlaisia eleitä ja vuorovaikutuksia; jatka oppimista pysyäksesi digitaalisten kokemusten eturintamassa.