/* ======示例=====
/
=============== */ //变量解释 /* f=对象主体frame s=frame内滚动元素 c=s内子元素 n=导航子元素 np=导航父元素 ns=导航内滚动元素 w,h=滚动距离 ww,hh=原始总长度 size=s内子元素原始数量 iv,ti=定时器 sw=控制开关 idx=当前序号 cm=s内子元素边距 */ (function($) { $.fn.mScroll = function(options) { var opts = $.extend({},$.fn.mScroll.defaults,options); this.each(function(){ //初始化变量 var f = $(this); var s,c,n,np,ns,w,ww,h,hh,wn,hn,size,iv,ti,sw=1,sw1=0,idx=0,ids=0,idx1=0,cm=0; //var tt=5000; //控制判断初始化 if(opts.cycle==0){opts.auto=0;} if(opts.touch==1){ opts.minsize=1; opts.mousestop=0; opts.mousewheel=0; } function getMinsize(){ if(typeof(opts.minsize)=="object"){ var minsize=0;//var minsize=opts.minsize[0].size; for(var i=0;imz.width){ minsize=mz.size; } } return minsize; } else{ return opts.minsize; } } if(f.children().size==1){return false;} //生成scroll结构,赋值s if(f.children().is("ul") && f.children().length>1 && !f.children().hasClass("child")){ f.children().addClass("scroll"); } else{ f.children().wrapAll("
"); } s = f.find(".scroll"); //初始化size size=s.children().length; //创建c镜像,赋值c if(opts.cycle==1 && size>getMinsize()){s.append(s.html());} c = s.children(); //初始化导航 n = $(opts.nav); if(opts.scrollnav){ wn = parseInt(n.outerWidth()+parseInt(n.css("margin-left"))+parseInt(n.css("margin-right"))); hn = parseInt(n.outerHeight()+parseInt(n.css("margin-top"))+parseInt(n.css("margin-bottom"))); np= $(opts.nav).parent(); n.wrapAll("
"); n.width(wn); ns=np.find(".scroll"); if(opts.nav_direction=="h"){ ns.width(n.length*wn); np.stop().animate({scrollLeft:0},100); } if(opts.nav_direction=="v"){ ns.height(n.length*hn); np.stop().animate({scrollTop:0},100); } } n.eq(0).addClass("now"); if(opts.cycle!==1){$(opts.prev).css("opacity","0.3");} //初始化各元素尺寸 function setWH(){ if(opts.direction=="h"){ setH(); s.width(100000); s.height("100%"); f.stop().animate({scrollLeft:0},100); } if(opts.direction=="v"){ setV(); s.height(100000); f.stop().animate({scrollTop:0},100); } } setWH(); //尺寸设置函数 function setH(){ f.css("width",""); c.css("width",""); cm=parseInt(c.last().css("margin-left"))+parseInt(c.last().css("margin-right")); if(cm==0){ w = Math.floor(f.width()/getMinsize()); if(opts.isfocus!=1){ f.width(w*getMinsize()); } else{ f.width("auto"); } c.width(w); } else{ //if(opts.isfocus!=1){ w=Math.floor((f.width()+cm)/4); c.width(w-cm); f.width(w*getMinsize()-cm); //} } ww=c.length*w; } function setV(){ f.height("auto"); c.css("height",""); cm=parseInt(c.css("margin-top"))+parseInt(c.css("margin-bottom")); if(cm==0){ h = Math.floor(f.height()/getMinsize()); if(opts.isfocus!=1){ f.height(h*getMinsize()); } else{ f.height("auto"); } c.height(h); } else{ if(opts.isfocus!=1){ h=c.height()+cm; f.height(h*getMinsize()-cm); } } hh=c.length*h; } //设置title $(opts.count).text(size); $(opts.title).text(c.eq(0).attr("title")); $(opts.index).text(1); //焦点图自适应 $(window).resize(function(){ if(f.is(":visible")){rs();} }); rs(); //自适应 function rs(){ sw==0; clearTimeout(ti); if(getMinsize()!=0){ if(opts.direction=="h"){ setH(); f.stop().scrollLeft(idx*w); } if(opts.direction=="v"){ setV(); f.stop().scrollTop(idx*h); } ti=setTimeout(function(){ sw=1; },500); //恢复轮播 if(opts.direction=="h"){ if(s.width()!==100000){ setWH(); } } if(opts.direction=="v"){ if(s.height()!==100000){ setWH(); } } if(size<=getMinsize()){ s.css({margin:"auto",width:w*size}); $(opts.prev).hide(); $(opts.next).hide(); } else{ if(opts.direction=="h"){ s.removeAttr("style").width(100000); } if(opts.direction=="v"){ s.removeAttr("style").height(100000); } $(opts.prev).show(); $(opts.next).show(); } } else{ //解除轮播 f.removeAttr("style"); s.removeAttr("style"); } } //判断c数量是否满足开始条件 if(size>getMinsize()){ //自动开始 if(opts.auto==1){ run(); } function run(){ var t=opts.delay; if(idx==0){ //t=tt; } clearTimeout(iv); iv=setTimeout(function(){ move(opts.dtype); run(); },t); } //执行回调函数 if(typeof(opts.callback)=="function"){ opts.callback(idx); } //-------------start-------------// //滚动函数 function move(act,speed){ if(!speed){speed=opts.speed;} if(sw==1){ sw=0; if(act=="left"){ if(opts.cycle!=1){ if(idx+getMinsize()=ww*0.5){f.scrollLeft(0);ids=0;} sw=1; }); } if(opts.direction=="v"){ f.animate({scrollTop:ids*h},speed,opts.easing,function(){ if(f.scrollTop()>=hh*0.5){f.scrollTop(0);ids=0;} sw=1; }); } } } if(act=="right"){ if(opts.cycle!=1){ if(idx>0){ idx--;ids--; if(opts.direction=="h"){ f.animate({scrollLeft:ids*w},speed,opts.easing,function(){sw=1;}); } if(opts.direction=="v"){ f.animate({scrollTop:ids*h},speed,opts.easing,function(){sw=1;}); } $(opts.next).css("opacity","1"); if(idx==0){ $(opts.prev).css("opacity","0.3"); } } else{ sw=1; } } if(opts.cycle==1){ if(idx==0){idx=size-1;ids=size;} else{idx--;} ids--; if(opts.direction=="h"){ if(f.scrollLeft()<=0){f.scrollLeft(ww*0.5);} f.animate({scrollLeft:ids*w},speed,opts.easing,function(){sw=1;}); } if(opts.direction=="v"){ if(f.scrollTop()<=0){f.scrollTop(hh*0.5);} f.animate({scrollTop:ids*h},speed,opts.easing,function(){sw=1;}); } } } n.removeClass("now"); n.eq(idx).addClass("now"); $(opts.title).text(c.eq(idx).attr("title")); $(opts.index).text(idx+1); if(opts.scrollnav){autonav();} if(typeof(opts.callback)=="function"){ opts.callback(idx);//执行自定义动画 } } } //左右按钮 if(opts.prev){ $(opts.prev).hover(function(){sw=1;}); $(opts.prev).unbind("click"); $(opts.prev).click(function(){ if(opts.arrow==1){move("right");} else{move("left");} if(opts.auto){ //clearInterval(iv); //iv = window.setInterval(function(){move(opts.dtype);},opts.delay); run(); } if(idx1>0){idx1--;c.eq(idx1).click();} }); } if(opts.next){ $(opts.next).hover(function(){sw=1;}); $(opts.next).unbind("click"); $(opts.next).click(function(){ if(opts.arrow==1){move("left");} else{move("right");} if(opts.auto){ //clearInterval(iv); //iv = window.setInterval(function(){move(opts.dtype);},opts.delay); run(); } if(idx1$(window).width()*0.05){ event.preventDefault();//阻止浏览器默认事件 } } if(opts.direction=="v"){ f.scrollTop(fl-(touch.screenY-p0)); end=touch.screenY; if(Math.abs(touch.screenY-p0)>f.height()*0.05){ } event.preventDefault();//阻止浏览器默认事件 } } },false); obj1.addEventListener('touchend',function(event){ if(sw==1 && end!=""){ if(end-startm*0.1){ move("right",(m-Math.abs(end-start))/m*opts.speed); } else{ sw=0; if(opts.direction=="h"){ f.stop().animate({scrollLeft:ids*m},opts.speed*0.5,opts.easing,function(){sw=1;}); } else{ f.stop().animate({scrollTop:ids*m},opts.speed*0.5,opts.easing,function(){sw=1;}); } } if(opts.auto){ //clearInterval(iv); //iv = window.setInterval(function(){move(opts.dtype);},opts.delay); run(); } sw1=0; end=""; } },false); } //-------------end-------------// } }) }; $.fn.mScroll.defaults = { auto : 1, //自动开始 direction : "h", //滚动方向,h横向,v纵向 dtype : "left", //正反方向 isfocus : 0, //是否作为焦点图 minsize : 1, //最小数量 speed : 500, //滚动速度 easing : "", //缓冲类型 delay : 5000, //自动滚动间隔 nav : null, //导航按钮 event : "click", //导航事件 scrollnav : 0, //导航滚动 navspeed : 500, //导航滚动速度 nav_direction : "h", //导航方向,h横向,v纵向 prev : null, //前一个 next : null, //后一个 index : null, //当前序号 count : null, //总数 title : null, //标题 arrow : 1, //是否反转 cycle : 1, //是否循环 mousestop : 1, //鼠标划入停止 mousewheel : 0, //开启滚轮事件 touch : 0, //开启触摸事件 callback : function(idx){} //回掉函数 } })(jQuery);