文章目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// 判断滑动方向
var startx, starty;
// 3、使用Math.atan2来计算起点与终点形成的直线角度。
// 获得角度
function getAngle(angx, angy) {
return Math.atan2(angy, angx) * 180 / Math.PI; // Math.atan2() 获取从 x 轴到点 (x,y) 的角度; Math.PI 圆周率
};
// 2、方向的判断:以起点做平面坐标系,与终点连线做直线,直线与x正半轴计算角度;我们以45度角为方向分割线,如:只要滑动角度大于等于45度且小于135度,则判断它方向为向上滑。
// 根据起点终点返回方向 1向上 2向下 3向左 4向右 0未滑动
function getDirection(startx, starty, endx, endy) {
var angx = endx - startx;
var angy = endy - starty;
var result = 0;
// 如果滑动距离太短
if (Math.abs(angx) < 2 && Math.abs(angy) < 2) { // Math.abs() 获取数的绝对值。
return result;
}
var angle = getAngle(angx, angy);
if (angle >= -135 && angle <= -45) {
result = 1;
} else if (angle > 45 && angle < 135) {
result = 2;
} else if ((angle >= 135 && angle <= 180) || (angle >= -180 && angle < -135)) {
result = 3;
} else if (angle >= -45 && angle <= 45) {
result = 4;
}
return result;
}
// 1、手指在屏幕上滑动时,使用H5中的touchstart滑动开始事件和touchmove滑动中事件,获取开始时的坐标和滑动过程中的坐标;
// 手指接触屏幕
document.addEventListener("touchstart", function(e) {
startx = e.touches[0].pageX;
starty = e.touches[0].pageY;
}, false);
// 手指在屏幕上移动
document.addEventListener("touchmove", function(e) {
var endx, endy;
endx = e.changedTouches[0].pageX;
endy = e.changedTouches[0].pageY;
var direction = getDirection(startx, starty, endx, endy);
setTimeout(function(){
switch (direction) {
case 0:
// alert("未滑动!");
break;
case 1:
// alert("向上!")
break;
case 2:
// alert("向下!")
break;
case 3:
// alert("向左!")
break;
case 4:
// alert("向右!")
break;
default:
}
},50)
}, false);

更多详情,请参考H5案例分享:移动端touch事件判断滑屏手势的方向

文章目录