Touch-Geste Swipe
Fast immer kommen Galerien mit Swipe als Plugin für WordPress, jQuery steuert die Galerie, für Swipe kommt dann noch hammer.js hinzu. Eine Menge Overhead für eine kleine Geste.
Ein swipe- oder onswipe-Event gibt es nicht, sondern ein Swipe wird durch touchstart und touchend entdeckt, wenn der Finger über eine Distanz hinweg nicht angehoben wird. Dabei hinkt Javascript schon lange nicht mehr hinter jQuery hinterher. Um ein einfaches Swipe von rechts nach links oder von links nach rechts zu entdecken, braucht Javascript nur wenige Zeilen. Hinter "Swipe" steckt ein einfaches touchstart-Event sowie das Auslesen, auf welchen Koordinaten der Finger die Touchfläche verläßt.
let touchstartX = 0 let touchendX = 0 function whichDirection() { if (touchendX < touchstartX) document.querySelector(".result").innerHTML = "Swipe nach Links"; if (touchendX > touchstartX) document.querySelector(".result").innerHTML = "Swipe nach Rechts"; } document.querySelector(".swipeDetector").addEventListener('touchstart', evt => { touchstartX = evt.changedTouches[0].screenX; console.log ("touchstartX", touchstartX); }) document.querySelector(".swipeDetector").addEventListener('touchend', evt => { touchendX = evt.changedTouches[0].screenX; console.log ("touchendX", touchendXå); whichDirection(); });
changedTouches (nur lesender Zugriff) ist eine Liste von Touch-Punkten:
- Beim Touchstart-Event enthält die Liste die Touch-Punkte, die beim Beginn des Touch-Events aktiv waren.
- Beim Touchmove-Event enthält changedTouches die Punkte, die sich seit dem vorgegangenen Event geändert haben.
- Beim Touchend-Event enthält changedTouches die Punkte, an denen der Finger von der Touchfläche hochgehoben wurde.
Koordinaten bei touchmove-Events
Beim Swipe wird der Finger über die Oberfläche in eine bestimmte Richtung gezogen. Ein onswipe-Event gibt es so in Javascript nicht, dabei ist diese Geste für viele Effekte interessanter als ein einfacher Touch (z.B. beim Blättern durch einen Slider, in dem die Vorwärts- und Rückwärts-Symbole für kleine Monitore eine Barriere sind).
touchstart, touchmove und touchend tracken die Bewegung des Fingers auf dem Touchscreen.
const startmove = document.querySelector('.startmove'); const moves = document.getElementById('moves'); let startx = 0; let starty = 0; let dist = 0;
startmove ist das HTML-Element, auf dem die Bewegung des Fingers beginnt. moves ist nur ein Element zur Ausgabe der Statusmeldungen.
Um die Bewegung des Fingers auf dem Touchscreen zu verfolgen, werden drei Event-Listener gebraucht: touchstart, touchmove und touchend.
startmove.addEventListener('touchstart', function(eve){ const touchobj = eve.changedTouches[0]; // erster Finger startx = parseInt(touchobj.clientX); // X/Y-Koordinaten relativ zum Viewport starty = parseInt(touchobj.clientY); moves.innerHTML = 'touchstart bei ClientX: ' + startx + 'px ClientY: ' + starty + "px"; eve.preventDefault(); });
eve.changedTouches[0] liefert die Informationen zum Finger und seiner Position am Anfang der Bewegung.
startmove.addEventListener('touchmove', function(eve){ const touchobj = eve.changedTouches[0]; // erster Finger const distx = parseInt(touchobj.clientX) - startx; const disty = parseInt(touchobj.clientY) - starty; moves.innerHTML = 'touchmove horizontal: ' + distx + 'px vertikal: ' + disty + 'px'; eve.preventDefault(); }); startmove.addEventListener('touchend', function(eve){ const touchobj = eve.changedTouches[0]; // reference first touch point for this event moves.innerHTML = 'touchend bei X-Koordinate: ' + touchobj.clientX + 'px Y-Koordinate: ' + touchobj.clientY + 'px'; eve.preventDefault(); });
jQuery hingegen bietet ein fertiges Swipe.
$("#box").on("swipe",function(){ $(this).hide(); });
Swipe mit oder ohne jQuery: HAMMER.JS ist eine solide kleine Library (7.34 kB minified + gzipped), die Touch-Gesten unterstützt und darüber hinaus die kleine Verzögerung von 300ms bei Klicks eliminierte (die es heute so nicht mehr gibt). HAMMER.JS entdeckt rotate, pinch, pres, pan, tap und swipe-Gesten, aber es sieht aus, als würde hammer.js nicht mehr unterstützt.
Swipe ohne jQuery
Für eine Galerie mit Swipe gibt es ein feines gut gepflegtes Script von lyfeyaj auf github: swipe.




Script von Github einbinden
swipe.min.js von swipe/build einbinden, rd. 8KB
Alternativer Ansatz
Ein input type="range"-Element dazu, das mit jedem Schritt ein Bild / Element weiter scrollt. Scrollen per CSS transformX.