/** * 擦试探测。用于检查鼠标或手机在屏幕上是否存在擦试行为。目前支持left right up down。 * 与网络上的相关组件不同的时,该组件可设置成页面滚动时不触发擦试事件。 * @return {[type]} [description] */ !function(){ var default_settings = { // 监听wipe的元素 elem: null, // 会出现滚动条的元素 scrollElem: "body", autoPreventDefault: true, // 上下移动的最小距离,超过这个距离就视为up or down moveY: 40, // 左右移动的最小距离,超过这个距离就视为left or right moveX: 20, wipeLeft: null, wipeRight: null, wipeUp: null, wipeDown: null }; $.fn.screenWipe = function( settings){ return this.each( function( index, elem){ elem = $( elem); var setting = $.extend( {}, default_settings, settings); // 如果没有对上下滑动进行处理(比如只处理左右滑动),则最好不要影响上下滑动 // 的浏览器默认行为 var hasUpDownAction = !!(setting.wipeUp || setting.wipeDown); elem.bind( "vmousedown", wipeStart); elem.bind( "vmouseup", wipeEnd) elem.bind( "vmousemove", wipeMove); var _lastWipePos = null; var hasScrollY = false; var stopScroll = setting; function getWipePosition( event){ var wipeX = event.clientX; var wipeY = event.clientY; if( event.changedTouches && event.changedTouches.length > 0){ wipeX = event.changedTouches[ 0].clientX; wipeY = event.changedTouches[ 0].clientY; } return { wipeX: wipeX, wipeY: wipeY}; } function wipeStart( event){ var wipePos = getWipePosition( event); _lastWipePos = wipePos; } function wipeEnd( event){ _lastWipePos = null; } function wipeMove( event){ var methodName = ""; if( _lastWipePos){ var wipePos = getWipePosition( event); var diffX = _lastWipePos.wipeX - wipePos.wipeX; var diffY = _lastWipePos.wipeY - wipePos.wipeY; /** * methodName 一律是指手指滑的去向的方向,也就是走势指向哪。 * 比如手指从上向下滑,那methodName就是down。 * 手机从左向右滑,那diffX一定小于0,methodName就是right */ if( Math.abs( diffX) > Math.abs( diffY) && Math.abs( diffX) > setting.moveX){ methodName = diffX > 0 ? "wipeLeft" : "wipeRight"; }else if( Math.abs( diffY) > setting.moveY){ methodName = diffY < 0 ? "wipeDown" : "wipeUp"; } if( methodName.length > 0){ setting[ methodName] && setting[ methodName].call( elem, event); _lastWipePos = null; //if( setting[ methodName]) //return false; } } if( setting.autoPreventDefault){ if( ( hasUpDownAction || ( methodName == "wipeLeft" || methodName == "wipeRight"))){ event.preventDefault(); } } } }); } }()