70 lines
2.9 KiB
JavaScript
70 lines
2.9 KiB
JavaScript
|
|
/*! 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);
|