JavaScript 監聽手機端的touch滑動事件(滑動手勢)
阿新 • • 發佈:2020-08-04
如何監聽移動端滑動手勢(上 / 下 / 左 / 右滑動),今天記錄下。
1 var startx, starty; 2 3 //獲得角度 4 function getAngle(angx, angy) { 5 return Math.atan2(angy, angx) * 180 / Math.PI; 6 }; 7 8 //根據起點終點返回方向 1向上滑動 2向下滑動 3向左滑動 4向右滑動 0點選事件 9 function getDirection(startx, starty, endx, endy) { 10 var angx = endx - startx; 11var angy = endy - starty; 12 var result = 0; 13 14 //如果滑動距離太短 15 if (Math.abs(angx) < 2 && Math.abs(angy) < 2) { 16 return result; 17 } 18 19 var angle = getAngle(angx, angy); 20 if (angle >= -135 && angle <= -45) { 21 result = 1;22 } else if (angle > 45 && angle < 135) { 23 result = 2; 24 } else if ((angle >= 135 && angle <= 180) || (angle >= -180 && angle < -135)) { 25 result = 3; 26 } else if (angle >= -45 && angle <= 45) { 27 result = 4;28 } 29 return result; 30 } 31 32 //手指接觸螢幕 33 document.addEventListener("touchstart", function(e){ 34 startx = e.touches[0].pageX; 35 starty = e.touches[0].pageY; 36 }, false); 37 38 //手指離開螢幕 39 document.addEventListener("touchend", function(e) { 40 var endx, endy; 41 endx = e.changedTouches[0].pageX; 42 endy = e.changedTouches[0].pageY; 43 var direction = getDirection(startx, starty, endx, endy); 44 switch (direction) { 45 case 0: 46 alert("點選!"); 47 break; 48 case 1: 49 alert("向上!"); 50 break; 51 case 2: 52 alert("向下!"); 53 break; 54 case 3: 55 alert("向左!"); 56 break; 57 case 4: 58 alert("向右!"); 59 break; 60 default: 61 alert("點選!"); 62 break; 63 } 64 }, false);
Ps:目前監聽的是body事件,可自行定義監聽DOM元素。
1 document.getElementById("xxx").addEventListener("touchstart", function(){ 2 xxxxxxxxxx 3 });