/*! 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);