diff options
Diffstat (limited to 'js/dojo-1.7.2/dojox/gesture/tap.js')
| -rw-r--r-- | js/dojo-1.7.2/dojox/gesture/tap.js | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/gesture/tap.js b/js/dojo-1.7.2/dojox/gesture/tap.js new file mode 100644 index 0000000..52df448 --- /dev/null +++ b/js/dojo-1.7.2/dojox/gesture/tap.js @@ -0,0 +1,145 @@ +//>>built +define("dojox/gesture/tap", [ + "dojo/_base/kernel", + "dojo/_base/declare", + "dojo/_base/lang", + "./Base", + "../main" +], function(kernel, declare, lang, Base, dojox){ +// module: +// dojox/gesture/tap + +/*===== + dojox.gesture.tap = { + // summary: + // This module provides tap gesture event handlers: + // + // 1. dojox.gesture.tap: 'tap' event + // + // 2. dojox.gesture.tap.hold: 'tap.hold' event + // + // 3. dojox.gesture.tap.doubletap: 'tap.doubletap' event + // + // example: + // A. Used with dojo.connect() + // | dojo.connect(node, dojox.gesture.tap, function(e){}); + // | dojo.connect(node, dojox.gesture.tap.hold, function(e){}); + // | dojo.connect(node, dojox.gesture.tap.doubletap, function(e){}); + // + // B. Used with dojo.on + // | define(['dojo/on', 'dojox/gesture/tap'], function(on, tap){ + // | on(node, tap, function(e){}); + // | on(node, tap.hold, function(e){}); + // | on(node, tap.doubletap, function(e){}); + // + // C. Used with dojox.gesture.tap.* directly + // | dojox.gesture.tap(node, function(e){}); + // | dojox.gesture.tap.hold(node, function(e){}); + // | dojox.gesture.tap.doubletap(node, function(e){}); + // + // Though there is always a default gesture instance after being required, e.g + // | require(['dojox/gesture/tap'], function(){...}); + // + // It's possible to create a new one with different parameter setting: + // | var myTap = new dojox.gesture.tap.Tap({holdThreshold: 300}); + // | dojo.connect(node, myTap, function(e){}); + // | dojo.connect(node, myTap.hold, function(e){}); + // | dojo.connect(node, myTap.doubletap, function(e){}); + }; +=====*/ + +kernel.experimental("dojox.gesture.tap"); + +// Declare an internal anonymous class which will only be exported +// by module return value e.g. dojox.gesture.tap.Tap +var clz = declare(/*===== "dojox.gesture.tap", =====*/Base, { + // defaultEvent: [readonly] String + // Default event - 'tap' + defaultEvent: "tap", + + // subEvents: [readonly] Array + // List of sub events, used by being + // combined with defaultEvent as 'tap.hold', 'tap.doubletap'. + subEvents: ["hold", "doubletap"], + + // holdThreshold: Integer + // Threshold(in milliseconds) for 'tap.hold' + holdThreshold: 500, + + // holdThreshold: Integer + // Timeout (in milliseconds) for 'tap.doubletap' + doubleTapTimeout: 250, + + // tapRadius: Integer + // Valid tap radius from previous touch point + tapRadius: 10, + + press: function(/*Object*/data, /*Event*/e){ + // summary: + // Overwritten, record initial tap info and register a timeout checker for 'tap.hold' + if(e.touches && e.touches.length >= 2){ + //tap gesture is only for single touch + delete data.context; + return; + } + var target = e.target; + this._initTap(data, e); + data.tapTimeOut = setTimeout(lang.hitch(this, function(){ + if(this._isTap(data, e)){ + this.fire(target, {type: "tap.hold"}); + } + delete data.context; + }), this.holdThreshold); + }, + release: function(/*Object*/data, /*Event*/e){ + // summary: + // Overwritten, fire matched 'tap' or 'tap.doubletap' during touchend + if(!data.context){ + clearTimeout(data.tapTimeOut); + return; + } + if(this._isTap(data, e)){ + switch(data.context.c){ + case 1: + this.fire(e.target, {type: "tap"}); + break; + case 2: + this.fire(e.target, {type: "tap.doubletap"}); + break; + } + } + clearTimeout(data.tapTimeOut); + }, + _initTap: function(/*Object*/data, /*Event*/e){ + // summary: + // Update the gesture data with new tap info + if(!data.context){ + data.context = {x: 0, y: 0, t: 0, c: 0}; + } + var ct = new Date().getTime(); + if(ct - data.context.t <= this.doubleTapTimeout){ + data.context.c++; + }else{ + data.context.c = 1; + data.context.x = e.screenX; + data.context.y = e.screenY; + } + data.context.t = ct; + }, + _isTap: function(/*Object*/data, /*Event*/e){ + // summary: + // Check whether it's an valid tap + var dx = Math.abs(data.context.x - e.screenX); + var dy = Math.abs(data.context.y - e.screenY); + return dx <= this.tapRadius && dy <= this.tapRadius; + } +}); + +// the default tap instance for handy use +dojox.gesture.tap = new clz(); +// Class for creating a new Tap instance +dojox.gesture.tap.Tap = clz; + +return dojox.gesture.tap; + +});
\ No newline at end of file |
