直接上图,左右拖拽轮播图时候 上下事件会存在冲突;翻看了 swipe.js源码,找到了解决办法;
isScrolling = !!( isScrolling || Math.abs(movPos.x-startPos.x) < Math.abs(movPos.y-startPos.y) );

源码附录:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="initial-scale=1.0,user-scalable=no,maximum-scale=1,width=device-width" />
<title>ios 轮播图简版</title>
<style>
*{ margin:0; padding:0;}
html{-webkit-box-sizing:border-box;margin:0 auto;height:100%; font-size:16px;-webkit-touch-callout:none;-webkit-user-select:none;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent; max-640px;}
body,html{overflow-x:hidden;100%;min-320px; margin:0 auto;background:#fff;}
ul,li{margin:0; padding:0;list-style:none;}
#refreshTxt{ 100%; text-align:center; height:35px; font-size:13px; line-height:35px; color:#888;position:absolute; left:0; top:0; z-index:1; overflow:hidden; display:block;}
.flexbox{display: -webkit-box; display: -moz-box;display:box; display: -webkit-flex; display: -ms-flexbox; display: flex; display: table9; }
.flexbox .flex1{-webkit-box-flex: 1; -moz-box-flex: 1; -webkit-flex: 1; -ms-flex: 1; flex: 1; display: table-cell9;}
.disbox{ display:-webkit-box;display:-moz-box; display:-o-box; display:box;}
.translateZ{ -webkit-transform:translateZ(0);transform:translateZ(0);-webkit-backface-visibility: hidden;backface-visibility: hidden;}
#wraps{ max-640px; margin:0 auto; border:2px solid red; box-sizing:border-box; background:#333; color:#fff; position:relative; z-index:99;}
#outer{ display:block; min-height:100px; height:260px; margin:10px auto 0; position:relative; overflow:hidden; box-sizing:border-box; background:#999;-webkit-transform-style:preserve-3d; }
#inner{ min-height:100px; -webkit-backface-visibility:hidden;display:block;box-sizing:border-box;display:-webkit-box;display:-moz-box; display:-o-box; display:box;}
#inner .memeber_content_one{ min-height:100px; border: 3px solid #fff; height:auto; overflow:hidden;
display:block; 100%; box-sizing:border-box;
text-align: center;
}
#inner .memeber_content_one a{ display: block}
#inner .memeber_content_one img{ 100%; }
#selects{ position:absolute; bottom:20px; right:50px; z-index:666;}
#selects span{ float:left; padding:5px; background:#fff; margin-right:5px; border-radius:50%;}
#selects .on{background:red;}
</style>
</head>
<body>
<P style="padding:10px 0; background:#eee; text-align:center ">导航栏</P>
<p id="refreshTxt" style='top:40px'>下拉刷新</p>
<div id="wraps">
<P style="padding:30px 0">http://www.cnblogs.com/surfaces</P>
<div id="outer" >
<div id="inner" >
<div class="memeber_content_one "><a href="https://www.qq.com" target="_blank"> <img src="../loveImg/QioA-fxehfqi8208393.jpg"></a></div>
<div class="memeber_content_one "><a href="https://www.baidu.com" target="_blank"><img src="../loveImg/13443924,1920,1080.jpg"></a></div>
<div class="memeber_content_one "><img src="../loveImg/1459302987961.jpg"></div>
</div>
<div id="selects"><span class="on"></span><span></span><span></span></div>
</div>
<!--<script src="mov3.js"></script>-->
<P style="padding:30px 0"><input type="text" ></P></P>
<P style="padding:30px 0">http://www.cnblogs.com/surfaces</P>
<P style="padding:30px 0">http://www.cnblogs.com/surfaces</P>
<P style="padding:30px 0">http://www.cnblogs.com/surfaces</P>
<P style="padding:30px 0">http://www.cnblogs.com/surfaces</P>
<P style="padding:30px 0"><input type="text" ></P></P>
<P style="padding:30px 0">http://www.cnblogs.com/surfaces</P>
<P style="padding:30px 0">http://www.cnblogs.com/surfaces</P>
<P style="padding:30px 0">http://www.cnblogs.com/surfaces</P>
<P style="padding:30px 0">http://www.cnblogs.com/surfaces</P>
</div>
<script>
/*transfrom.js*/
;(function(window,document,undefined){var prefix=function(){var div=document.createElement("div");var cssText="-webkit-transition:all .1s;-moz-transition:all .1s; -Khtml-transition:all .1s; -o-transition:all .1s; -ms-transition:all .1s; transition:all .1s;";div.style.cssText=cssText;var style=div.style;var dom="";if(style.webkitTransition){dom="webkit"}if(style.MozTransition){dom="moz"}if(style.khtmlTransition){dom="Khtml"}if(style.oTransition){dom="o"}if(style.msTransition){dom="ms"}div=null;if(dom){return{dom:dom,lowercase:dom,css:"-"+dom+"-",js:dom[0].toUpperCase()+dom.substr(1)}}else{return false}}();var transitionEnd=function(){var el=document.createElement("div");var transEndEventNames={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",msTransition:"MSTransitionEnd",transition:"transitionend"};for(var name in transEndEventNames){if(el.style[name]!==undefined){return transEndEventNames[name]}}el=null;return false}();var supportedTransforms=/^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i;var dasherize=function(str){return str.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-zd])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()};var transform=function(obj,properties,duration,ease,callback,delay){if(!obj){return}if(typeof duration=="function"){callback=duration,ease=undefined,duration=400,delay=delay}if(typeof ease=="function"){callback=ease,ease=undefined,delay=delay}if(duration){duration=typeof duration=="number"?duration:400};if(typeof callback == 'number') delay=callback,callback=undefined;delay=(typeof delay=="number")?delay:0;var nowTransition=prefix.js+"Transition";var nowTransform=prefix.js+"Transform";var prefixcss=prefix.css;if(!prefix.js){nowTransition="transition";nowTransform="transform";prefixcss=""}var transitionProperty,transitionDuration,transitionTiming,transitionDelay;var key,cssValues={},cssProperties,transforms="";var transform;var cssReset={};var css="";var cssProperties=[];transform=prefixcss+"transform";cssReset[transitionProperty=prefixcss+"transition-property"]=cssReset[transitionDuration=prefixcss+"transition-duration"]=cssReset[transitionDelay=prefixcss+"transition-delay"]=cssReset[transitionTiming=prefixcss+"transition-timing-function"]="";for(key in properties){if(supportedTransforms.test(key)){transforms+=key+"("+properties[key]+") "}else{cssValues[key]=properties[key],cssProperties.push(dasherize(key))}}if(transforms){cssValues[transform]=transforms,cssProperties.push(transform)}if(duration>0&&typeof properties==="object"){cssValues[transitionProperty]=cssProperties.join(", ");cssValues[transitionDuration]=duration+"ms";cssValues[transitionTiming]=(ease||"linear");cssValues[transitionDelay]=delay+"ms"}for(var attr in cssValues){css+=dasherize(attr)+":"+cssValues[attr]+";"}obj.style.cssText=obj.style.cssText+css;if(!callback){return}var fired=false;var handler=function(){callback&&callback.apply(obj,arguments);fired=true;if(obj.removeEventListener){obj.removeEventListener(transitionEnd,arguments.callee,false)}};if(obj.addEventListener){obj.addEventListener(transitionEnd,handler,false)}if(!transitionEnd||duration<=0){setTimeout(function(){handler()});return}setTimeout(function(){if(fired){return}handler()},(duration+delay)+25)};window.transform=transform})(window,document);
</script>
<script>
var prefix = function() { //获取前缀
var div = document.createElement('div');//建立临时DIV容器
var cssText = '-webkit-transition:all .1s;-moz-transition:all .1s; -Khtml-transition:all .1s; -o-transition:all .1s; -ms-transition:all .1s; transition:all .1s;';
div.style.cssText = cssText;
var style = div.style;
var dom='';
if (style.webkitTransition) {
dom ='webkit';
}else if (style.MozTransition) {
dom='moz';
}else if (style.khtmlTransition) {
dom='Khtml';
}else if (style.oTransition) {
dom='o';
}else if (style.msTransition) {
dom='ms';
}
if(dom){////style.transition 情况
return dom;
}
div=null; ////去掉不必要的数据存储,便于垃圾回收
}();
function getTransform(el) { //获取translate
var pre='-'+prefix+'-transform';
var transform = window.getComputedStyle(el, null)[pre]|| window.getComputedStyle(el, null).getPropertyValue('transform');
var results = transform.match(/matrix(?:(3d)(-{0,1}d+(?:, -{0,1}d+)*(?:, (-{0,1}d+))(?:, (-{0,1}d+))(?:, (-{0,1}d+)), -{0,1}d+)|(-{0,1}d+(?:, -{0,1}d+)*(?:, (-{0,1}d+))(?:, (-{0,1}d+))))/);
if(!results) return [0, 0, 0];
if(results[1] == '3d') return results.slice(2,5);
results.push(0);
return results.slice(5, 8); // returns the [X,Y,Z,1] values
}
var userAgent=window.navigator.userAgent.toLowerCase(),
isWebkit = userAgent.indexOf('webkit') !== -1,
isiOS = userAgent.indexOf('iphone') !== -1 ; //iphone终端
//var isTouch=!! ("ontouchstart" in window )|| (window.DocumentTouch && document instanceof DocumentTouch);
var isTouch=!! ("ontouchstart" in window );
if(isTouch){
var touchEvent ={
touchstart:"touchstart",
touchmove:"touchmove",
touchend:"touchend"
}
var outer = document.getElementById('outer');
var inner = document.getElementById('inner');
var aLi = inner.getElementsByClassName("memeber_content_one");
var w = parseInt(aLi[0].offsetWidth);
//var innerWid=inner.style.width = aLi.length * w + 'px'; //直接通过 display:-webkit-box; 设置外围宽度 不再需要计算
var innerWid= aLi.length * w + 'px';
var iNow=0;
var downLeft = 0;
var maxDiatance=parseInt(w)-parseInt(innerWid);
var startPos={};
var isScrolling;
inner.addEventListener(touchEvent.touchstart,function(e){
var self=this;
var e=e||window.event;
var touchs = e.changedTouches[0]; //手指头的一个
startPos={
x : touchs.pageX||touchs.clientX,
y : touchs.pageY||touchs.clientY,
startTime:+new Date
}
downLeft= parseInt(getTransform(inner)[0]);
var isMoveScale=true;
isScrolling = undefined; //这个参数判断是垂直滚动还是水平滚动 默认0水平
inner.style.webkitTransition=inner.style.transition =" 0s ";
inner.addEventListener(touchEvent.touchmove,move,false);
inner.addEventListener(touchEvent.touchend,end,false);
function move(){
var e=e||window.event;
if (e.touches.length > 1 || e.scale && e.scale !== 1) return;// // 当屏幕有多个touch或者页面被缩放过,就不执行move操作
var touchs = e.changedTouches[0],
self=this;
var movPos={
x : touchs.pageX||touchs.clientX,
y : touchs.pageY||touchs.clientY
}
if ( typeof isScrolling == 'undefined') {
isScrolling = !!( isScrolling || Math.abs(movPos.x-startPos.x) < Math.abs(movPos.y-startPos.y) );
}
//console.log('222isScrolling'+isScrolling);
if (!isScrolling) {
e.preventDefault();
var translateX=getTransform(self)[0];
if(translateX>=0){//如果从左侧向右到尽头
if(isMoveScale){
startPos.x = touchs.pageX||touchs.clientX;
isMoveScale=false;
}
var one=parseInt((touchs.pageX-startPos.x)*0.4);
inner.style.webkitTransform=inner.style.transform="translate3d("+one+"px,0,0)";
}
else if(translateX<= maxDiatance){
if(isMoveScale){
startPos.x = touchs.pageX||touchs.clientX;
isMoveScale=false;
}
var two=parseInt((touchs.pageX-startPos.x)*0.4+maxDiatance);
inner.style.webkitTransform=inner.style.transform="translate3d("+two+"px,0,0)";
}
else {
var three=parseInt(touchs.pageX-startPos.x+downLeft);
inner.style.webkitTransform=inner.style.transform="translate3d("+three+"px,0,0)";
}
//if(touchs.clientX<2&&isiOS||touchs.clientX>window.innerWidth-2&&isiOS){ //左右边界处理 ios手机bug
// end();
// }
} //水平
}// move end
function end(){
var e=e||window.event,
touchs = e.changedTouches[0],
self=this,
aboveY=parseInt(getTransform(self)[0]),
endX=touchs.pageX||touchs.clientX,
nowLeft=parseInt((endX-startPos.x)),
duration=+new Date-startPos.startTime;
// determine direction of swipe (true:right, false:left)
// var direction = delta.x < 0;
if (!isScrolling) {
if(aboveY>0){
transform(self,{translate3d:'0,0,0'},260);
}
if(aboveY<0&&aboveY<maxDiatance){
transform(self,{translate3d:''+maxDiatance+'px,0,0'},260);
}
if(endX<startPos.x){//右侧往左边滑动 滑动距离大于一定 或者 滑动时间小于250毫秒
if(iNow!=aLi.length-1){
if(Math.abs(nowLeft)>parseInt(w/3)||duration<200&&Math.abs(nowLeft)>30){
iNow++;
}
transform(self,{translate3d:'-'+iNow*w+'px,0,0'},400);
}
}else{ //左边往右侧滑动
if(iNow!=0){
if(Math.abs(nowLeft)>parseInt(w/3)||duration<200&&Math.abs(nowLeft)>30){
iNow--;
}
transform(self,{translate3d:'-'+iNow*w+'px,0,0'},400);
}
}
//小圆点样式
var selects=document.getElementById("selects"),
spans=selects.getElementsByTagName("span"),
i=0;
for(;i<spans.length;i++){
spans[i].className='';
}
spans[iNow].className='on';
self.removeEventListener(touchEvent.touchmove,move,false);
self.removeEventListener(touchEvent.touchend,end,false);
};
} //水平
});// touchstart end
}
//拖拽刷新
function refreshPage(element, txtobj, fn) {
var isTouch=!! ("ontouchstart" in window );
if(!isTouch) return;
var startPos={},
doc=document,
mydistanceY = 0,
isScrolling,
isDown=false,
maxs2 = 0;
var TransitionEnd=function () {
var el = document.createElement('div');
var transEndEventNames = {
WebkitTransition : 'webkitTransitionEnd',
MozTransition : 'transitionend',
OTransition : 'oTransitionEnd',
msTransition : 'MSTransitionEnd',
transition : 'transitionend'
};
for (var name in transEndEventNames) {
if (el.style[name] !== undefined) {
return transEndEventNames[name] ;
}
}
el=null;
return false;
}();;
var prefix = function() {
var div = document.createElement('div');//建立临时DIV容器
var cssText = '-webkit-transition:all .1s;-moz-transition:all .1s; -Khtml-transition:all .1s; -o-transition:all .1s; -ms-transition:all .1s; transition:all .1s;';
div.style.cssText = cssText;
var style = div.style, dom='';
if (style.webkitTransition) {
dom ='webkit';
}else if (style.MozTransition) {
dom='moz';
}else if (style.khtmlTransition) {
dom='Khtml';
}else if (style.oTransition) {
dom='o';
}else if (style.msTransition) {
dom='ms';
}
div=null; ////去掉不必要的数据存储,便于垃圾回收
if(dom){////style.transition 情况
return {
dom: dom,
css: '-' + dom + '-'
};
}else{
return false;
}
}();
//参数修正
var nowTransition=prefix.dom+'Transition';
var nowTransform=prefix.dom+'Transform';
var vendors= prefix.css;
if(!prefix.dom){
nowTransition='transition';
nowTransform='transform';
vendors='';
}
element.addEventListener("touchstart", function(e) {
var e = e || window.event,
touchs = e.touches[0];
startPos={
x: touchs.pageX,
y: touchs.pageY
};
isDown=false;
element.style[nowTransition+'Duration'] = "0s";
maxs2 = 0;
isScrolling = undefined; //这个参数判断是垂直滚动还是水平滚动 默认0水平
doc.addEventListener("touchmove", mov2, false);
doc.addEventListener("touchend", end2, false);
}, false);
function mov2(e) {
var e = e || window.event;
if (e.touches.length > 1 || e.scale && e.scale !== 1) {
return
}
var touchs = e.changedTouches[0];
var movPos={
x:touchs.pageX ,
y:touchs.pageY
};
if ( typeof isScrolling == 'undefined') {
isScrolling = !!( isScrolling || Math.abs(movPos.x-startPos.x) < Math.abs(movPos.y-startPos.y) );
}
movedistance = Math.ceil(touchs.clientY - startPos.y);
if (isScrolling&&movedistance > 4) {//向下拖拽
e.preventDefault();
isDown=true;
maxs2 = parseInt(movedistance * 0.2);
element.style[nowTransform] = "translate3d(0," + maxs2 + "px,0)";
if (maxs2 > 35) {
txtobj.innerHTML = "释放刷新"
} else {
txtobj.innerHTML = "下拉刷新"
}
} else {
isDown=false;
if(!isDown){
document.removeEventListener("touchmove", mov2);
document.removeEventListener("touchmove", end2);
}
}
}
function end2(e) {
var e = e || window.event;
var touchs = e.changedTouches[0];
if (isDown&&isScrolling&&Math.abs(touchs.clientY - startPos.y) > 5) {
element.style[nowTransition]=vendors+"transform .6s cubic-bezier(0.65, 0.5, 0.12, 1)";
element.style[nowTransform] = "translate3d(0,0,0)";
var fire=false;
function handler() {
fire=true;
fn&&fn.apply(this, arguments);
element.removeEventListener(TransitionEnd, arguments.callee)
}
if (maxs2 > 36||txtobj.innerHTML == "释放刷新") {
element.addEventListener(TransitionEnd, handler);
}
setTimeout(function(){
if(!fire&&txtobj.innerHTML == "释放刷新"){
handler();
}
},660);
}
doc.removeEventListener("touchmove", mov2);
doc.removeEventListener("touchmove", end2)
}
};
//
var ele=document.getElementById("wraps"); //下拉元素盒子
var txtobj=document.getElementById("refreshTxt");//下拉刷新文字
refreshPage(ele,txtobj,function(){
window.location.href= window.location.href; //回调函数 也可以ajax 刷新
});
</script>
</body>
</html>
上面还需要优化的 地方,touchmove时候,没有在16.6毫秒内 进行正确的渲染 需要调用 requestAnimationFrame 进行正确的监听渲染,后期补充;