UNPKG

radjs-gesture

Version:
2 lines 4.84 kB
!function(t,e){"function"==typeof define&&define.amd?define(function(){return t.GestureTracker=e()}):"object"==typeof module&&module.exports?module.exports=t.GestureTracker=e():t.GestureTracker=e()}(this,function(){function t(t){function e(){return"devicePixelRatio"in window?window.devicePixelRatio:1}function i(t){return t.addEventListener||t.attachEvent}function n(t){return t.removeEventListener||t.detachEvent}function r(t){var e=i(document),r=n(document),s=document.addEventListener?"DOMContentLoaded":"onreadystatechange";e.call(document,s,function(){r.call(document,s,arguments.callee,!1),t()},!1)}var s,a=!1,o=this;this._el=t,this.MOVE_LIMIT=10;for(s in this.TRACK_EVENTS)this._el.addEventListener(this.TRACK_EVENTS[s],this,!1),i(this._el).call(this._el,this.TRACK_EVENTS[s],this,!1);this.setDoubleGuardState=function(t){a=t},this.getDoubleGuardState=function(){return a},this.destroy=function(){for(s in this.TRACK_EVENTS)this.TRACK_EVENTS.hasOwnProperty(s)&&n(this._el).call(this._el,this.TRACK_EVENTS[s],this);this._el=null},r(function(){var t,i,n=document.createElement("div");n.style.position="absolute",n.style.height="1in",n.style.width="1in",n.style.top="-100%",n.style.left="-100%",document.body.appendChild(n),t=n.offsetHeight,document.body.removeChild(n),i=t*e()*screen.pixelDepth/24,o.MOVE_LIMIT=i/6})}return t.prototype={DOUBLE_TAP_TIMEOUT:300,HOLD_TIMEOUT:350,GESTURE_EVENTS:{hold:"hold",fling:"fling",longtap:"longtap",tap:"tap",doubletap:"doubletap"},TRACK_EVENTS:{up:"pointerup",down:"pointerdown",move:"pointermove",over:"pointerover",cancel:"pointercancel"},tracks:{},firstDownTime:0,handleEvent:function(t){switch(t.type){case this.TRACK_EVENTS.down:this._pointerDown(t);break;case this.TRACK_EVENTS.move:this._pointerMove(t);break;case this.TRACK_EVENTS.cancel:case this.TRACK_EVENTS.up:this._pointerUp(t)}},_pointerDown:function(t){var e=this;clearTimeout(this._holdID),this._holdID=setTimeout(function(){e._fireEvent(this.GESTURE_EVENTS.hold,t)}.bind(this),this.HOLD_TIMEOUT),this.tracks[t.pointerId]={start:{clientX:t.clientX,clientY:t.clientY,timeStamp:t.timeStamp},pre:{clientX:t.clientX,clientY:t.clientY,timeStamp:t.timeStamp},last:{clientX:t.clientX,clientY:t.clientY,timeStamp:t.timeStamp},end:{clientX:t.clientX,clientY:t.clientY,timeStamp:t.timeStamp}}},_pointerMove:function(t){var e,i;this.tracks&&this.tracks[t.pointerId]&&t.timeStamp-this.tracks[t.pointerId].last.timeStamp>10&&(e=this.tracks[t.pointerId].last.clientX-this.tracks[t.pointerId].pre.clientX>this.MOVE_LIMIT,i=this.tracks[t.pointerId].last.clientY-this.tracks[t.pointerId].pre.clientY>this.MOVE_LIMIT,(e||i)&&clearTimeout(this._holdID),this.tracks[t.pointerId].pre.clientX=this.tracks[t.pointerId].last.clientX,this.tracks[t.pointerId].pre.clientY=this.tracks[t.pointerId].last.clientY,this.tracks[t.pointerId].pre.timeStamp=this.tracks[t.pointerId].last.timeStamp,this.tracks[t.pointerId].last.clientX=t.clientX,this.tracks[t.pointerId].last.clientY=t.clientY,this.tracks[t.pointerId].last.timeStamp=t.timeStamp)},_pointerUp:function(t){clearTimeout(this._holdID),this.tracks&&this.tracks[t.pointerId]&&(this.tracks[t.pointerId].end.clientX=t.clientX,this.tracks[t.pointerId].end.clientY=t.clientY,this.tracks[t.pointerId].end.timeStamp=t.timeStamp,this._checkGesture(t),this.tracks[t.pointerId]=null)},_checkGesture:function(t){function e(t,e,i,n){return Math.pow((e-t)*(e-t)+(n-i)*(n-i),.5)}var i,n,r=t.pointerId,s=this.tracks[r];i=Math.abs(e(s.start.clientX,s.end.clientX,s.start.clientY,s.end.clientY))>20,n=Math.abs(e(s.end.clientX,s.pre.clientX,s.end.clientY,s.pre.clientY))>0&&s.end.timeStamp-s.start.timeStamp>50,n?this._fireEvent(this.GESTURE_EVENTS.fling,t,{start:s.start,end:s.end,speedX:(s.end.clientX-s.pre.clientX)/(s.end.timeStamp-s.pre.timeStamp),speedY:(s.end.clientY-s.pre.clientY)/(s.end.timeStamp-s.pre.timeStamp)}):i||(s.end.timeStamp-s.start.timeStamp>300?this._fireEvent(this.GESTURE_EVENTS.longtap,t):t.timeStamp-this.firstDownTime<this.DOUBLE_TAP_TIMEOUT?(this.getDoubleGuardState()&&clearTimeout(this._deferredId),this._fireDeferredEvent(this.GESTURE_EVENTS.doubletap,t)):(this.firstDownTime=t.timeStamp,this.getDoubleGuardState()?this._deferredId=setTimeout(function(){this._fireDeferredEvent(this.GESTURE_EVENTS.tap,t),clearTimeout(this._deferredId)}.bind(this),this.DOUBLE_TAP_TIMEOUT):this._fireEvent(this.GESTURE_EVENTS.tap,t)))},_fireDeferredEvent:function(t,e){this._fireEvent(t,e),this.firstDownTime=0},_fireEvent:function(t,e,i){var n,r=document.createEvent("MouseEvents");if(r.initMouseEvent(t,!0,!0,window,1,e.screenX,e.screenY,e.clientX,e.clientY,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,e.relatedTarget),r.pointerId=this.touchID,r.pointerType=e.pointerType,i)for(n in i)i.hasOwnProperty(n)&&(r[n]=i[n]);e.target.dispatchEvent(r)}},t}); //# sourceMappingURL=release/gesture.min.js.map