| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | // jQuery.event.swipe// 0.5// Stephen Band// Dependencies// jQuery.event.move 1.2// One of swipeleft, swiperight, swipeup or swipedown is triggered on// moveend, when the move has covered a threshold ratio of the dimension// of the target node, or has gone really fast. Threshold and velocity// sensitivity changed with://// jQuery.event.special.swipe.settings.threshold// jQuery.event.special.swipe.settings.sensitivity(function (thisModule) {	if (typeof define === 'function' && define.amd) {        // AMD. Register as an anonymous module.        define(['jquery', undefined, 'jquery.event.move'], thisModule);    } else if ((typeof module !== "undefined" && module !== null) && module.exports) {        module.exports = thisModule;	} else {		// Browser globals        thisModule(jQuery);	}})(function(jQuery, undefined){	var add = jQuery.event.add,	   	    remove = jQuery.event.remove,	    // Just sugar, so we can have arguments in the same order as	    // add and remove.	    trigger = function(node, type, data) {	    	jQuery.event.trigger(type, data, node);	    },	    settings = {	    	// Ratio of distance over target finger must travel to be	    	// considered a swipe.	    	threshold: 0.4,	    	// Faster fingers can travel shorter distances to be considered	    	// swipes. 'sensitivity' controls how much. Bigger is shorter.	    	sensitivity: 6	    };	function moveend(e) {		var w, h, event;		w = e.currentTarget.offsetWidth;		h = e.currentTarget.offsetHeight;		// Copy over some useful properties from the move event		event = {			distX: e.distX,			distY: e.distY,			velocityX: e.velocityX,			velocityY: e.velocityY,			finger: e.finger		};		// Find out which of the four directions was swiped		if (e.distX > e.distY) {			if (e.distX > -e.distY) {				if (e.distX/w > settings.threshold || e.velocityX * e.distX/w * settings.sensitivity > 1) {					event.type = 'swiperight';					trigger(e.currentTarget, event);				}			}			else {				if (-e.distY/h > settings.threshold || e.velocityY * e.distY/w * settings.sensitivity > 1) {					event.type = 'swipeup';					trigger(e.currentTarget, event);				}			}		}		else {			if (e.distX > -e.distY) {				if (e.distY/h > settings.threshold || e.velocityY * e.distY/w * settings.sensitivity > 1) {					event.type = 'swipedown';					trigger(e.currentTarget, event);				}			}			else {				if (-e.distX/w > settings.threshold || e.velocityX * e.distX/w * settings.sensitivity > 1) {					event.type = 'swipeleft';					trigger(e.currentTarget, event);				}			}		}	}	function getData(node) {		var data = jQuery.data(node, 'event_swipe');				if (!data) {			data = { count: 0 };			jQuery.data(node, 'event_swipe', data);		}				return data;	}	jQuery.event.special.swipe =	jQuery.event.special.swipeleft =	jQuery.event.special.swiperight =	jQuery.event.special.swipeup =	jQuery.event.special.swipedown = {		setup: function( data, namespaces, eventHandle ) {			var data = getData(this);			// If another swipe event is already setup, don't setup again.			if (data.count++ > 0) { return; }			add(this, 'moveend', moveend);			return true;		},		teardown: function() {			var data = getData(this);			// If another swipe event is still setup, don't teardown.			if (--data.count > 0) { return; }			remove(this, 'moveend', moveend);			return true;		},		settings: settings	};});
 |