(function ($) { /** * If no touch events are available map touch events to corresponding mouse events. **/ if(!('ontouchstart' in window)){ var _fakeCallbacks = {}; // store the faked callbacks so that they can be unbound function touch2mouse(context,args){ var type = args[0],//事件类型 t = type ,matched = false; if ((typeof type) == "object") { return args; } if(type.indexOf('touchstart')>-1){ matched = true; t = t.replace('touchstart','mousedown'); }else if(t.indexOf('touchend')>-1){ matched = true; t = t.replace('touchend','mouseup'); }else if(t.indexOf('touchmove')>-1){ matched = true; t = t.replace('touchmove','mousemove'); } if(matched){//匹配到touch事件 var ci = -1; //找出callback,需要更换里面的event对象的属性 for(var i =1;i -1){ args[ci] = fakeTouches(type, args[ci] , context); } } return args; } function fakeTouches(type, callback, context) { // wrap the callback with a function that adds a fake // touches property to the event. return _fakeCallbacks[callback] = function (event) { if(event.liveFired)context = this;//if it is delegate event,change context to target element if (event.button) { return false; } event.touches = [{ length: 1,// 1 mouse (finger) clientX: event.clientX, clientY: event.clientY, pageX: event.pageX, pageY: event.pageY, screenX: event.screenX, screenY: event.screenY, target: event.target }]; event.touchType = type; return callback.apply(context, [event]); } } var _trigger = $.fn.trigger; $.fn.trigger = function(event, data){ var args = Array.prototype.slice.call(arguments,0); return _trigger.apply(this,touch2mouse(this,args)); }; var _triggerHandler = $.fn.triggerHandler; $.fn.triggerHandler = function(event, data){ var args = Array.prototype.slice.call(arguments,0); return _triggerHandler.apply(this, touch2mouse(this,args)); }; var _on = $.fn.on; $.fn.on = function(event, selector, data, callback, one){ var args = Array.prototype.slice.call(arguments,0); return _on.apply(this,touch2mouse(this,args)); } var _off = $.fn.off; $.fn.off = function(event, selector, callback){ var args = [event]; if(typeof selector == 'string'){ args.push(selector); } var result = touch2mouse(this,args).concat([_fakeCallbacks[callback]||callback]); delete(_fakeCallbacks[callback]); return _off.apply(this,result); } } })(Zepto);