123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- // wrapped by build app
- define("dojox/mobile/app/_event", ["dijit","dojo","dojox"], function(dijit,dojo,dojox){
- dojo.provide("dojox.mobile.app._event");
- dojo.experimental("dojox.mobile.app._event.js");
- dojo.mixin(dojox.mobile.app, {
- eventMap: {},
- connectFlick: function(target, context, method){
- // summary:
- // Listens for a flick event on a DOM node. If the mouse/touch
- // moves more than 15 pixels in any given direction it is a flick.
- // The synthetic event fired specifies the direction as
- // <ul>
- // <li><b>'ltr'</b> Left To Right</li>
- // <li><b>'rtl'</b> Right To Left</li>
- // <li><b>'ttb'</b> Top To Bottom</li>
- // <li><b>'btt'</b> Bottom To Top</li>
- // </ul>
- // target: Node
- // The DOM node to connect to
- var startX;
- var startY;
- var isFlick = false;
- var currentX;
- var currentY;
- var connMove;
- var connUp;
- var direction;
- var time;
- // Listen to to the mousedown/touchstart event
- var connDown = dojo.connect("onmousedown", target, function(event){
- isFlick = false;
- startX = event.targetTouches ? event.targetTouches[0].clientX : event.clientX;
- startY = event.targetTouches ? event.targetTouches[0].clientY : event.clientY;
- time = (new Date()).getTime();
- connMove = dojo.connect(target, "onmousemove", onMove);
- connUp = dojo.connect(target, "onmouseup", onUp);
- });
- // The function that handles the mousemove/touchmove event
- var onMove = function(event){
- dojo.stopEvent(event);
- currentX = event.targetTouches ? event.targetTouches[0].clientX : event.clientX;
- currentY = event.targetTouches ? event.targetTouches[0].clientY : event.clientY;
- if(Math.abs(Math.abs(currentX) - Math.abs(startX)) > 15){
- isFlick = true;
- direction = (currentX > startX) ? "ltr" : "rtl";
- }else if(Math.abs(Math.abs(currentY) - Math.abs(startY)) > 15){
- isFlick = true;
- direction = (currentY > startY) ? "ttb" : "btt";
- }
- };
- var onUp = function(event){
- dojo.stopEvent(event);
- connMove && dojo.disconnect(connMove);
- connUp && dojo.disconnect(connUp);
- if(isFlick){
- var flickEvt = {
- target: target,
- direction: direction,
- duration: (new Date()).getTime() - time
- };
- if(context && method){
- context[method](flickEvt);
- }else{
- method(flickEvt);
- }
- }
- };
- }
- });
- dojox.mobile.app.isIPhone = (dojo.isSafari
- && (navigator.userAgent.indexOf("iPhone") > -1 ||
- navigator.userAgent.indexOf("iPod") > -1
- ));
- dojox.mobile.app.isWebOS = (navigator.userAgent.indexOf("webOS") > -1);
- dojox.mobile.app.isAndroid = (navigator.userAgent.toLowerCase().indexOf("android") > -1);
- if(dojox.mobile.app.isIPhone || dojox.mobile.app.isAndroid){
- // We are touchable.
- // Override the dojo._connect function to replace mouse events with touch events
- dojox.mobile.app.eventMap = {
- onmousedown: "ontouchstart",
- mousedown: "ontouchstart",
- onmouseup: "ontouchend",
- mouseup: "ontouchend",
- onmousemove: "ontouchmove",
- mousemove: "ontouchmove"
- };
- }
- dojo._oldConnect = dojo._connect;
- dojo._connect = function(obj, event, context, method, dontFix){
- event = dojox.mobile.app.eventMap[event] || event;
- if(event == "flick" || event == "onflick"){
- if(dojo.global["Mojo"]){
- event = Mojo.Event.flick;
- } else{
- return dojox.mobile.app.connectFlick(obj, context, method);
- }
- }
- return dojo._oldConnect(obj, event, context, method, dontFix);
- };
- });
|