/** * 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; var ratio = window.devicePixelRatio || 1; if(Math.abs(dx) * ratio >= $.detectSwipe.threshold) { dir = dx > 0 ? 'left' : 'right' } else if(Math.abs(dy) * ratio >= $.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); } }; }); }));