lubuntu.me/plugins/so-widgets-bundle/js/jquery.cycle.swipe.js
2018-01-26 15:50:15 +01:00

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);