123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- var $support = {
- transform3d: ('WebKitCSSMatrix' in window),
- touch: ('ontouchstart' in window)
- };
- var $E = {
- start: $support.touch ? 'touchstart' : 'mousedown',
- move: $support.touch ? 'touchmove' : 'mousemove',
- end: $support.touch ? 'touchend' : 'mouseup',
- cancel: $support.touch ? 'touchcancel' : '',
- transEnd:'webkitTransitionEnd'
- };
- function getPage (event, page) {
- return $support.touch ? event.changedTouches[0][page] : event[page];
- }
- var zyEvent = function(selector,moveFun,endFun,lock,transEnd){
- var self = this;
- var max = 50;
- self.Max = {X:max,Y:max};
- self.endFun = endFun || null;
- self.moveFun = moveFun || null;
- self.transEnd = transEnd||null;
- self.type = "";
- self._vendor=(window.navigator.userAgent.indexOf("Android 4.")>=0);
- self._locked=lock;
- self.start = false;
- if(typeof selector == 'object')
- self.element = selector;
- else if(typeof selector == 'string')
- self.element = document.getElementById(selector);
- self.element.addEventListener($E.start, self, false);
- self.element.addEventListener($E.move, self, false);
- self.element.addEventListener($E.transEnd, self, false);
- if($E.cancel!="")
- {
- self.element.addEventListener($E.cancel, self, false);
- document.addEventListener($E.cancel, self, false);
- }
- document.addEventListener($E.end, self, false);
- return self;
- }
- zyEvent.prototype = {
- handleEvent: function(event) {
- var self = this;
-
- switch (event.type) {
- case $E.start:
- self._touchStart(event);
- break;
- case $E.move:
- self._touchMove(event);
- break;
- case $E.end:
- case $E.cancel:
- self._touchEnd(event);
- break;
- case 'click':
- self._click(event);
- break;
- case $E.transEnd:
- if(self.transEnd)
- self.transEnd(event);
- break;
-
- }
- },
- _touchStart: function(event) {
-
- var self = this;
- self.start = true;
- if (!$support.touch) {
- event.preventDefault();
- }
- if(self._locked)
- {
- event.stopPropagation();
- }
- self.type = "";
- self.startPageX = getPage(event, 'pageX');
- self.startPageY = getPage(event, 'pageY');
- self.startTime = event.timeStamp;
- },
- _touchMove: function(event) {
-
- var self = this;
- if(!self.start)
- return;
-
- var pageX = getPage(event, 'pageX'),
- pageY = getPage(event, 'pageY'),
- deltaX = pageX - self.startPageX,
- deltaY = pageY - self.startPageY;
- if(self._vendor)//Android 4.0 need prevent default
- {
- event.preventDefault();
- }
- if(self._locked)
- {
- event.preventDefault();
- event.stopPropagation();
- }
- if(Math.abs(deltaX)> Math.abs(deltaY) && deltaX<-self.Max.X)
- self.type = "left";
- if(Math.abs(deltaX)> Math.abs(deltaY) && deltaX>self.Max.X)
- self.type = "right";
- if(Math.abs(deltaX)< Math.abs(deltaY) && deltaY<-self.Max.Y)
- self.type = "up";
- if(Math.abs(deltaX)< Math.abs(deltaY) && deltaY>self.Max.Y)
- self.type = "down";
- if(self.moveFun)
- self.moveFun(self.element,deltaX,deltaY);
- },
- _touchEnd: function(event) {
-
- var self = this;
- if(self._locked)
- {
- event.preventDefault();
- event.stopPropagation();
- }
- if(self.start == true)
- {
- var pageX = getPage(event, 'pageX'),
-
- pageY = getPage(event, 'pageY'),
- deltaX = pageX - self.startPageX,
- deltaY = pageY - self.startPageY;
-
- if(self.endFun)
- self.endFun(self.element,deltaX,deltaY,self.type);
- self.start = false;
- }
- },
- _click: function(event) {
- var self = this;
- event.stopPropagation();
- event.preventDefault();
- },
- destroy: function() {
- var self = this;
- self.element.removeEventListener($E.start, self);
- self.element.removeEventListener($E.move, self);
- self.element.removeEventListener($E.transEnd, self);
- self.element.removeEventListener($E.cancel, self);
- document.removeEventListener($E.end, self);
- document.removeEventListener($E.cancel, self);
- }
- }
|