85 lines
2.2 KiB
JavaScript
85 lines
2.2 KiB
JavaScript
/**
|
|
* jquery.detectSwipe v2.1.3
|
|
* jQuery Plugin to obtain touch gestures from iPhone, iPod Touch, iPad and Android
|
|
* http://github.com/marcandre/detect_swipe
|
|
* Based on touchwipe by Andreas Waltl, netCU Internetagentur (http://www.netcu.de)
|
|
*/
|
|
|
|
(function (factory) {
|
|
if (typeof define === 'function' && define.amd) {
|
|
// AMD. Register as an anonymous module.
|
|
define(['jquery'], factory);
|
|
} else if (typeof exports === 'object') {
|
|
// Node/CommonJS
|
|
module.exports = factory(require('jquery'));
|
|
} else {
|
|
// Browser globals
|
|
factory(jQuery);
|
|
}
|
|
}(function($) {
|
|
|
|
$.detectSwipe = {
|
|
version: '2.1.2',
|
|
enabled: 'ontouchstart' in document.documentElement,
|
|
preventDefault: true,
|
|
threshold: 20
|
|
};
|
|
|
|
var startX,
|
|
startY,
|
|
isMoving = false;
|
|
|
|
function onTouchEnd() {
|
|
this.removeEventListener('touchmove', onTouchMove);
|
|
this.removeEventListener('touchend', onTouchEnd);
|
|
isMoving = false;
|
|
}
|
|
|
|
function onTouchMove(e) {
|
|
if ($.detectSwipe.preventDefault) { e.preventDefault(); }
|
|
if(isMoving) {
|
|
var x = e.touches[0].pageX;
|
|
var y = e.touches[0].pageY;
|
|
var dx = startX - x;
|
|
var dy = startY - y;
|
|
var dir;
|
|
if(Math.abs(dx) >= $.detectSwipe.threshold) {
|
|
dir = dx > 0 ? 'left' : 'right'
|
|
}
|
|
else if(Math.abs(dy) >= $.detectSwipe.threshold) {
|
|
dir = dy > 0 ? 'up' : 'down'
|
|
}
|
|
if(dir) {
|
|
onTouchEnd.call(this);
|
|
$(this).trigger('swipe', dir).trigger('swipe' + dir);
|
|
}
|
|
}
|
|
}
|
|
|
|
function onTouchStart(e) {
|
|
if (e.touches.length == 1) {
|
|
startX = e.touches[0].pageX;
|
|
startY = e.touches[0].pageY;
|
|
isMoving = true;
|
|
this.addEventListener('touchmove', onTouchMove, false);
|
|
this.addEventListener('touchend', onTouchEnd, false);
|
|
}
|
|
}
|
|
|
|
function setup() {
|
|
this.addEventListener && this.addEventListener('touchstart', onTouchStart, false);
|
|
}
|
|
|
|
function teardown() {
|
|
this.removeEventListener('touchstart', onTouchStart);
|
|
}
|
|
|
|
$.event.special.swipe = { setup: setup };
|
|
|
|
$.each(['left', 'up', 'down', 'right'], function () {
|
|
$.event.special['swipe' + this] = { setup: function(){
|
|
$(this).on('swipe', $.noop);
|
|
} };
|
|
});
|
|
}));
|