forked from malsup/cycle2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
jquery.cycle2.swipe.js
70 lines (56 loc) · 2.76 KB
/
jquery.cycle2.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
/*! swipe plugin for Cycle2; version: 20121120 */
(function($) {
"use strict";
// this script adds support for touch events. the logic is lifted from jQuery Mobile.
// if you have jQuery Mobile installed, you do NOT need this script
var supportTouch = 'ontouchend' in document;
$.event.special.swipe = $.event.special.swipe || {
scrollSupressionThreshold: 10, // More than this horizontal displacement, and we will suppress scrolling.
durationThreshold: 1000, // More time than this, and it isn't a swipe.
horizontalDistanceThreshold: 30, // Swipe horizontal displacement must be more than this.
verticalDistanceThreshold: 75, // Swipe vertical displacement must be less than this.
setup: function() {
var $this = $( this );
$this.bind( 'touchstart', function( event ) {
var data = event.originalEvent.touches ? event.originalEvent.touches[ 0 ] : event;
var stop, start = {
time: ( new Date() ).getTime(),
coords: [ data.pageX, data.pageY ],
origin: $( event.target )
};
function moveHandler( event ) {
if ( !start )
return;
var data = event.originalEvent.touches ? event.originalEvent.touches[ 0 ] : event;
stop = {
time: ( new Date() ).getTime(),
coords: [ data.pageX, data.pageY ]
};
// prevent scrolling
if ( Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.scrollSupressionThreshold ) {
event.preventDefault();
}
}
$this.bind( 'touchmove', moveHandler )
.one( 'touchend', function( event ) {
$this.unbind( 'touchmove', moveHandler );
if ( start && stop ) {
if ( stop.time - start.time < $.event.special.swipe.durationThreshold &&
Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.horizontalDistanceThreshold &&
Math.abs( start.coords[ 1 ] - stop.coords[ 1 ] ) < $.event.special.swipe.verticalDistanceThreshold ) {
start.origin.trigger( "swipe" )
.trigger( start.coords[0] > stop.coords[ 0 ] ? "swipeleft" : "swiperight" );
}
}
start = stop = undefined;
});
});
}
};
$.event.special.swipeleft = $.event.special.swipeleft || {
setup: function() {
$( this ).bind( 'swipe', $.noop );
}
};
$.event.special.swiperight = $.event.special.swiperight || $.event.special.swipeleft;
})(jQuery);