123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- define("dojox/gesture/swipe", [
- "dojo/_base/kernel",
- "dojo/_base/declare",
- "./Base",
- "../main"
- ], function(kernel, declare, Base, dojox){
- // module:
- // dojox/gesture/swipe
- /*=====
- dojox.gesture.swipe = {
- // summary:
- // This module provides swipe gestures including:
- //
- // 1. dojox.gesture.swipe
- //
- // A series of 'swipe' will be fired during touchmove, this will mostly
- // be used to keep sliding the Dom target based on the swiped distance(dx, dy).
- //
- // 2. dojox.gesture.swipe.end
- //
- // Fired when a swipe is ended so that an bounce animation may be applied
- // to the dom target sliding to the final position.
- //
- // Following information will be included in the fired swipe events:
- //
- // 1. type: 'swipe'|'swipe.end'
- //
- // 2. time: an integer indicating the delta time(in milliseconds)
- //
- // 3. dx: delta distance on X axis, dx less than 0 - moving left, dx larger than 0 - moving right
- //
- // 4. dy: delta distance on Y axis, dy less than 0 - moving up, dY larger than 0 - moving down
- //
- // Note - dx and dy can also be used together for a hybrid swipe(both vertically and horizontally)
- //
- // example:
- // A. Used with dojo.connect()
- // | dojo.connect(node, dojox.gesture.swipe, function(e){});
- // | dojo.connect(node, dojox.gesture.swipe.end, function(e){});
- //
- // B. Used with dojo.on
- // | define(['dojo/on', 'dojox/gesture/swipe'], function(on, swipe){
- // | on(node, swipe, function(e){});
- // | on(node, swipe.end, function(e){});
- //
- // C. Used with dojox.gesture.swipe.* directly
- // | dojox.gesture.swipe(node, function(e){});
- // | dojox.gesture.swipe.end(node, function(e){});
- };
- =====*/
- kernel.experimental("dojox.gesture.swipe");
- // Declare an internal anonymous class which will only be exported
- // by module return value e.g. dojox.gesture.swipe.Swipe
- var clz = declare(/*===== "dojox.gesture.swipe", =====*/Base, {
- // defaultEvent: [readonly] String
- // Default event - 'swipe'
- defaultEvent: "swipe",
- // subEvents: [readonly] Array
- // List of sub events, used by
- // being combined with defaultEvent as 'swipe.end'
- subEvents: ["end"],
- press: function(/*Object*/data, /*Event*/e){
- // summary:
- // Overwritten, set initial swipe info
- if(e.touches && e.touches.length >= 2){
- //currently only support single-touch swipe
- delete data.context;
- return;
- }
- if(!data.context){
- data.context = {x: 0, y: 0, t: 0};
- }
- data.context.x = e.screenX;
- data.context.y = e.screenY;
- data.context.t = new Date().getTime();
- this.lock(e.currentTarget);
- },
- move: function(/*Object*/data, /*Event*/e){
- // summary:
- // Overwritten, fire matched 'swipe' during touchmove
- this._recognize(data, e, "swipe");
- },
- release: function(/*Object*/data, /*Event*/e){
- // summary:
- // Overwritten, fire matched 'swipe.end' when touchend
- this._recognize(data, e, "swipe.end");
- delete data.context;
- this.unLock();
- },
- cancel: function(data, e){
- // summary:
- // Overwritten
- delete data.context;
- this.unLock();
- },
- _recognize: function(/*Object*/data, /*Event*/e, /*String*/type){
- // summary:
- // Recognize and fire appropriate gesture events
- if(!data.context){
- return;
- }
- var info = this._getSwipeInfo(data, e);
- if(!info){
- // no swipe happened
- return;
- }
- info.type = type;
- this.fire(e.target, info);
- },
- _getSwipeInfo: function(/*Object*/data, /*Event*/e){
- // summary:
- // Calculate swipe information - time, dx and dy
- var dx, dy, info = {}, startData = data.context;
-
- info.time = new Date().getTime() - startData.t;
-
- dx = e.screenX - startData.x;
- dy = e.screenY - startData.y;
-
- if(dx === 0 && dy === 0){
- // no swipes happened
- return null;
- }
- info.dx = dx;
- info.dy = dy;
- return info;
- }
- });
- // the default swipe instance for handy use
- dojox.gesture.swipe = new clz();
- // Class for creating a new Swipe instance
- dojox.gesture.swipe.Swipe = clz;
- return dojox.gesture.swipe;
- });
|