/* * jSwipe - jQuery Plugin * http://plugins.jquery.com/project/swipe * http://www.ryanscherf.com/demos/swipe/ * * Copyright (c) 2009 Ryan Scherf (www.ryanscherf.com) * Licensed under the MIT license * * $Date: 2009-07-14 (Tue, 14 Jul 2009) $ * $version: 0.1.2 * * This jQuery plugin will only run on devices running Mobile Safari * on iPhone or iPod Touch devices running iPhone OS 2.0 or later. * http://developer.apple.com/iphone/library/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW5 */ (function($) { $.fn.swipe = function(options) { // Default thresholds & swipe functions var defaults = { threshold: { x: 10, y: 30 }, swipeLeft: function() {alert('swiped left')}, swipeRight: function() {alert('swiped right')}, swipeMoving: function( value ){alert( value )} }; var options = $.extend(defaults, options); if (!this) return false; return this.each(function() { var me = $(this) // Private variables for each element var originalCoord = {x: 0, y: 0} var finalCoord = {x: 0, y: 0} // Screen touched, store the original coordinate function touchStart(event) { //console.log('Starting swipe gesture...') originalCoord.x = event.targetTouches[0].pageX originalCoord.y = event.targetTouches[0].pageY } // Store coordinates as finger is swiping function touchMove(event) { if(event.touches.length > 1 || event.scale && event.scale !== 1){ return; } finalCoord.x = event.targetTouches[0].pageX; // Updated X,Y coordinates finalCoord.y = event.targetTouches[0].pageY; changeX = originalCoord.x - finalCoord.x; changeY = originalCoord.y - finalCoord.y; if ( typeof this.isScrolling == 'undefined') { this.isScrolling = !!( this.isScrolling || Math.abs(changeX) < Math.abs(changeY) ); } if( !this.isScrolling ) { // console.log(changeX); event.preventDefault(); defaults.swipeMoving( changeX ); } } // Done Swiping // Swipe should only be on X axis, ignore if swipe on Y axis // Calculate if the swipe was left or right function touchEnd(event) { //console.log('Ending swipe gesture...') var changeY = originalCoord.y - finalCoord.y; if (!this.isScrolling) { changeX = originalCoord.x - finalCoord.x if(changeX > defaults.threshold.x) { defaults.swipeLeft() } if(changeX < (defaults.threshold.x*-1)) { defaults.swipeRight() } } } // Swipe was started function touchStart(event) { //console.log('Starting swipe gesture...') this.isScrolling = undefined; originalCoord.x = event.targetTouches[0].pageX originalCoord.y = event.targetTouches[0].pageY finalCoord.x = originalCoord.x finalCoord.y = originalCoord.y } // Swipe was canceled function touchCancel(event) { //console.log('Canceling swipe gesture...') } // Add gestures to all swipable areas if (!this.addEventListener) { this.attachEvent("touchstart", touchStart); this.attachEvent("touchmove", touchMove); this.attachEvent("touchend", touchEnd); this.attachEvent("touchcancel", touchCancel); } else { this.addEventListener("touchstart", touchStart, false); this.addEventListener("touchmove", touchMove, false); this.addEventListener("touchend", touchEnd, false); this.addEventListener("touchcancel", touchCancel, false); } }); }; })(jQuery);