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