toucher.js 2.71 KB
(function(c,d,b){var a=b(c,d);c.util=c.util||{};c.util.toucher=c.util.toucher||a;c.define&&define(function(f,e,g){return a})})(this,document,function(f,i){function d(k,j){return k.className.match(new RegExp("(\\s|^)"+j+"(\\s|$)"))}function b(r,q,p){this._events=this._events||{};var m,o;if(typeof(q)=="string"){m=q.replace(/^\./,"");o=p}else{m=null;o=q}if(typeof(o)=="function"&&r&&r.length){var j=r.split(/\s+/);for(var k=0,n=j.length;k<n;k++){var l=j[k];if(!this._events[l]){this._events[l]=[]}this._events[l].push({"className":m,"fn":o})}}return this}function g(m,n){this._events=this._events||{};if(!this._events[m]){return}var j=this._events[m];var o=n.target;while(1){if(j.length==0){return}if(o==this.dom||!o){for(var l=0,q=j.length;l<q;l++){var k=j[l]["className"];var r=j[l]["fn"];if(k==null){e(m,r,o,n)}}return}var p=j;j=[];for(var l=0,q=p.length;l<q;l++){var k=p[l]["className"];var r=p[l]["fn"];if(d(o,k)){if(e(m,r,o,n)==false){return}}else{j.push(p[l])}}o=o.parentNode}}function e(k,l,o,n){var p=n.touches.length?n.touches[0]:{};var m={"type":k,"target":n.target,"pageX":p.clientX||0,"pageY":p.clientY||0};if(k.match(/^swipe/)&&n.startPosition){m.startX=n.startPosition["pageX"],m.startY=n.startPosition["pageY"],m.moveX=m.pageX-m.startX,m.moveY=m.pageY-m.startY}var j=l.call(o,m);if(j==false){n.preventDefault();n.stopPropagation()}return j}function h(k,j,m,l){return Math.abs(k-j)>=Math.abs(m-l)?(k-j>0?"Left":"Right"):(m-l>0?"Up":"Down")}function a(y){var r=this;var p=0;var j=0;var l,u,k,s;var q;var x;var w=false;var t=null;function m(z){w=false;clearTimeout(x);clearTimeout(q)}function n(z){t=z;l=z.touches[0].pageX;u=z.touches[0].pageY;k=0;s=0;w=true;p=new Date();g.call(r,"swipeStart",z);clearTimeout(x);x=setTimeout(function(){m(z);g.call(r,"longTap",z)},500)}function v(A){g.call(r,"swipeEnd",t);if(!w){return}var z=new Date();if(z-j>260){q=setTimeout(function(){m();g.call(r,"singleTap",t)},250)}else{clearTimeout(q);m(A);g.call(r,"doubleTap",t)}j=z}function o(A){t=A;A.startPosition={pageX:l,pageY:u};g.call(r,"swipe",A);if(!w){return}k=A.touches[0].pageX;s=A.touches[0].pageY;if(Math.abs(l-k)>2||Math.abs(u-s)>2){var z=h(l,k,u,s);g.call(r,"swipe"+z,A)}else{m(A);g.call(r,"singleTap",A)}m(A)}y.addEventListener("touchstart",n);y.addEventListener("MSPointerDown",n);y.addEventListener("pointerdown",n);y.addEventListener("touchend",v);y.addEventListener("MSPointerUp",v);y.addEventListener("pointerup",v);y.addEventListener("touchmove",o);y.addEventListener("MSPointerMove",o);y.addEventListener("pointermove",o);y.addEventListener("touchcancel",m);y.addEventListener("MSPointerCancel",m);y.addEventListener("pointercancel",m)}function c(j,k){var k=k||{};this.dom=j;a.call(this,this.dom)}c.prototype["on"]=b;return function(j){return new c(j)}});