function getPosition(event) { if (event.touches && event.touches[0]) return { x: event.touches[0].clientX || 0, y: event.touches[0].clientY || 0 }; return { x: event.clientX || 0, y: event.clientY || 0 }; } function getDiff(a, b) { const aa = getPosition(a); const bb = getPosition(b); return { x: bb.x - aa.x, y: bb.y - aa.y }; } function detectSwipes(el) { let firstMove = null; let lastMove = null; function start(event) { firstMove = lastMove = event; } function move(event) { lastMove = event; if (firstMove && lastMove) { console.log('drag', getDiff(firstMove, lastMove)) } } function end(event) { if (firstMove && lastMove) { const diff = getDiff(firstMove, lastMove); const distX = Math.abs( diff.x ); const distY = Math.abs( diff.y ); if (distX > distY) {/* most significant */ if ( diff.x > 0 ) { /* left swipe */ console.log('swipe left', distX); } else { /* right swipe */ console.log('swipe right', distX); } } else { if ( diff.y > 0 ) { /* up swipe */ console.log('swipe up', distY); } else { /* down swipe */ console.log('swipe down', distY); } } } firstMove = null; lastMove = null; } el.addEventListener('mousedown', start, false); el.addEventListener('mousemove', move, false); el.addEventListener('mouseup', end, false); el.addEventListener('touchstart', start, false); el.addEventListener('touchmove', move, false); el.addEventListener('touchend', end, false); } const doc = document.documentElement; doc.style.height = '100%'; doc.style.width = '100%'; doc.style.border = '3px solid red'; detectSwipes(doc);
417700cookie-checkJavascript: detect swipes (touch + mouse)