forked from mud/JSGestureRecognizer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
swipe.js
77 lines (61 loc) · 2.7 KB
/
swipe.js
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
70
71
72
73
74
75
76
77
module.exports = SwipeGestureRecognizer;
var GestureRecognizer = require("./gesture-recognizer"),
Point = require("geometry/point.js");
function SwipeGestureRecognizer()
{
this.numberOfTouchesRequired = 1;
this.direction = SwipeGestureRecognizer.Directions.Right;
GestureRecognizer.call(this);
}
SwipeGestureRecognizer.MinimumDistance = 100;
SwipeGestureRecognizer.Directions = {
Right : 1 << 0,
Left : 1 << 1,
Up : 1 << 2,
Down : 1 << 3
};
SwipeGestureRecognizer.prototype = {
constructor: SwipeGestureRecognizer,
__proto__: GestureRecognizer.prototype,
touchesBegan: function(event)
{
if (event.currentTarget !== this.target)
return;
if (this.numberOfTouchesRequired === this.numberOfTouches) {
event.preventDefault();
GestureRecognizer.prototype.touchesBegan.call(this, event);
this._translationOrigin = this.locationInElement();
} else
this.enterFailedState();
},
touchesMoved: function(event)
{
if (this.numberOfTouchesRequired !== this.numberOfTouches) {
this.enterFailedState();
return;
}
event.preventDefault();
var point = this.locationInElement();
var translation = new Point(point.x - this._translationOrigin.x, point.y - this._translationOrigin.y);
if (this.state !== GestureRecognizer.States.Recognized && this.direction === SwipeGestureRecognizer.Directions.Right) {
if (translation.x > SwipeGestureRecognizer.MinimumDistance && Math.abs(translation.x) > Math.abs(translation.y))
this.enterRecognizedState();
}
if (this.state !== GestureRecognizer.States.Recognized && this.direction === SwipeGestureRecognizer.Directions.Left) {
if (translation.x < -SwipeGestureRecognizer.MinimumDistance && Math.abs(translation.x) > Math.abs(translation.y))
this.enterRecognizedState();
}
if (this.state !== GestureRecognizer.States.Recognized && this.direction === SwipeGestureRecognizer.Directions.Up) {
if (translation.y < -SwipeGestureRecognizer.MinimumDistance && Math.abs(translation.y) > Math.abs(translation.x))
this.enterRecognizedState();
}
if (this.state !== GestureRecognizer.States.Recognized && this.direction === SwipeGestureRecognizer.Directions.Down) {
if (translation.y > SwipeGestureRecognizer.MinimumDistance && Math.abs(translation.y) > Math.abs(translation.x))
this.enterRecognizedState();
}
},
touchesEnded: function(event)
{
this.enterFailedState();
}
};