/*! * TouchSlide v1.1 * javascript触屏滑动特效插件,移动端滑动特效,触屏焦点图,触屏Tab切换,触屏多图切换等 * 详尽信息请看官网:http://www.SuperSlide2.com/TouchSlide/ * * Copyright 2013 大话主席 * * 请尊重原创,保留头部版权 * 在保留版权的前提下可应用于个人或商业用途 * 1.1 宽度自适应(修复安卓横屏时滑动范围不变的bug) */ var TouchSlide = function(a){ a = a||{}; var opts = { slideCell:a.slideCell || "#touchSlide", //运行效果主对象,必须用id!,例如 slideCell:"#touchSlide" titCell:a.titCell || ".hd li", // 导航对象,当自动分页设为true时为“导航对象包裹层” mainCell:a.mainCell || ".bd", // 切换对象包裹层 effect:a.effect || "left", // 效果,支持 left、leftLoop autoPlay:a.autoPlay || false, // 自动播放 delayTime:a.delayTime || 600, // 效果持续时间 interTime:a.interTime ||4000, // 自动运行间隔 defaultIndex:a.defaultIndex ||0, // 默认的当前位置索引。0是第一个; defaultIndex:1 时,相当于从第2个开始执行 titOnClassName:a.titOnClassName ||"on", // 当前导航对象添加的className autoPage:a.autoPage || false, // 自动分页,当为true时titCell为“导航对象包裹层” prevCell:a.prevCell ||".prev", // 前一页按钮 nextCell:a.nextCell ||".next", // 后一页按钮 pageStateCell:a.pageStateCell ||".pageState", // 分页状态对象,用于显示分页状态,例如:2/3 pnLoop:a.pnLoop=='undefined '?true:a.pnLoop , // 前后按钮点击是否继续执行效果,当为最前/后页是会自动添加“prevStop”/“nextStop”控制样色 startFun:a.startFun || null, // 每次切换效果开始时执行函数,用于处理特殊情况或创建更多效果。用法 satrtFun:function(i,c){ }; 其中i为当前分页,c为总页数 endFun:a.endFun || null, // 每次切换效果结束时执行函数,用于处理特殊情况或创建更多效果。用法 endFun:function(i,c){ }; 其中i为当前分页,c为总页数 switchLoad:a.switchLoad || null //每次切换效果结束时执行函数,用于处理特殊情况或创建更多效果。用法 endFun:function(i,c){ }; 其中i为当前分页,c为总页数 } var slideCell = document.getElementById(opts.slideCell.replace("#","")); if( !slideCell ) return false; //简单模拟jquery选择器 var obj = function(str,parEle){ str = str.split(" "); var par = []; parEle = parEle||document; var retn = [ parEle ] ; for( var i in str ){ if(str[i].length!=0) par.push(str[i]) } //去掉重复空格 for( var i in par ){ if( retn.length==0 ) return false; var _retn = []; for ( var r in retn ) { if( par[i][0] =="#" ) _retn.push( document.getElementById( par[i].replace("#","") ) ); else if( par[i][0] =="." ){ var tag = retn[r].getElementsByTagName('*'); for( var j=0; j" } } else{ for( var i=0; i'); conBox.style.cssText="width:"+tempSize*slideW+"px;"+"position:relative;overflow:hidden;padding:0;margin:0;"; for ( var i =0; i= navObjSize) { index = isTouch?index-1:0; } else if( index < 0) { index = isTouch?0:navObjSize-1; } if( sLoad!=null ){ doSwitchLoad(0) } translate( (-index*slideW),delayTime ); oldIndex=index; break; case "leftLoop": if( sLoad!=null ){ doSwitchLoad(0) } translate( -(index+1)*slideW ,delayTime ); if ( index==-1){ timeout= setTimeout( function(){ translate( -navObjSize*slideW ,0 ); }, delayTime ); index = navObjSize-1; } else if( index==navObjSize ){ timeout= setTimeout( function(){ translate( -slideW ,0 ); }, delayTime ); index = 0; } oldIndex=index; break;// leftLoop end }//switch end doStartFun(); endTimeout= setTimeout( function(){ doEndFun() }, delayTime ); //设置className for ( var i=0; i/"+navObjSize; } };// doPlay end //初始化执行 doPlay(); //自动播放 if (autoPlay) { inter=setInterval(function(){ index++; doPlay() }, interTime); } //点击事件 if( navObj ){ for ( var i=0; i 1 || e.scale && e.scale !== 1) return }; //多点或缩放 var point = hasTouch ? e.touches[0] : e; distX = point.pageX-startX; distY = point.pageY-startY; if ( typeof scrollY == 'undefined') { scrollY = !!( scrollY || Math.abs(distX) < Math.abs(distY) ); } if( !scrollY ){ e.preventDefault(); if(autoPlay){clearInterval(inter) } switch (effect){ case "left": if( (index==0 && distX>0) || (index>=navObjSize-1&&distX<0 )){ distX=distX*0.4 } translate( -index*slideW+distX ,0 ); break; case "leftLoop":translate( -(index+1)*slideW+distX ,0 );break; } if( sLoad!=null && Math.abs(distX)>slideW/3 ){ doSwitchLoad( distX>-0?-1:1 ) } } } //触摸结束函数 var tEnd = function(e){ if(distX==0) return; e.preventDefault(); if( !scrollY ) { if( Math.abs(distX) > slideW/10 ){ distX>0? index--: index++; } doPlay( true ); if (autoPlay) { inter=setInterval(function(){ index++; doPlay() }, interTime); } } conBox.removeEventListener(touchMove, tMove, false); conBox.removeEventListener(touchEnd, tEnd, false); } //添加“触摸开始”事件监听 conBox.addEventListener(touchStart, tStart ,false); }// TouchSlide E