Jquery滚动插件–Xslider:支持水平滚动和垂直滚动的多种效果

来源:互联网 发布:知乎 雷洋 编辑:程序博客网 时间:2024/05/19 03:45

源地址 http://www.rjboy.cn/?p=708

本插件在原有基础上,添加了一些小功能:

1.点击单个unit时,自动使该unit的左边或者右边unit显示出来。


/*http://www.rjboy.cnBy sean during 2010.07 - 2010.12;Demo:$(".productshow").Xslider({//.productshow是要移动对象的外框,页面上所有绑定了类.productshow的对象都会有切换效果;unitdisplayed:3,//可视的单位个数   必需项;numtoMove:1,//要移动的单位个数    必需项;viewedSize:120,//可视宽度或高度     不传入则查找要移动对象外层的宽或高度;scrollobj:".vscrollobj",//要移动的对象    不传入则查找productshow下的ul;unitlen:20,//移动的单位宽或高度      不传入则查找li的尺寸;scrollobjSize:$(".vscrollobj").height(),//移动最长宽或高(要移动对象的宽度或高度)   不传入则由li个数乘以unitlen计算;dir:"V",//水平移动还是垂直移动       默认H为水平移动,传入V则表示垂直移动(注意是大写字母);loop:"cycle",//循环滚动            不传入则不循环滚动;speed:500, //滚动速度      默认为500;autoscroll:2000//自动移动间隔时间(毫秒)     不传入则不会自动移动;});*/(function($){$.extend($.easing,{easeInSine: function (x, t, b, c, d) {return -c * Math.cos(t/d * (Math.PI/2)) + c + b;}});$.fn.Xslider=function(settings){settings=$.extend({},$.fn.Xslider.sn.defaults,settings);this.each(function(){var scrollobj=settings.scrollobj ? $(this).find(settings.scrollobj) : $(this).find("ul"),    viewedSize=settings.viewedSize || (settings.dir=="H" ? scrollobj.parent().width() : scrollobj.parent().height()),//length of the wrapper visible;    scrollunits=scrollobj.find("li"),//units to move;    unitlen=settings.unitlen || (settings.dir=="H" ? scrollunits.eq(0).outerWidth() : scrollunits.eq(0).outerHeight()),    unitdisplayed=settings.unitdisplayed,//units num displayed;numtoMove=settings.numtoMove > unitdisplayed ? unitdisplayed : settings.numtoMove,    scrollobjSize=settings.scrollobjSize || scrollunits.length*unitlen,//length of the scrollobj;    offset=0,//max width to move;    offsetnow=0,//scrollobj now offset;    movelength=unitlen*numtoMove,pos=settings.dir=="H" ? "left" : "top",    moving=false,//moving now?;    btnright=$(this).find("p.jtright"),    btnleft=$(this).find("p.jtleft");btnright.unbind("click");btnleft.unbind("click");// 重新计算scrollobjSize = 0;$.each(scrollunits, function(index, unit){scrollobjSize += $(unit).outerWidth();$(unit).bind("click", function(){// 将点击的unit的左边或者右边智能显示if ($(this).position().left < (offsetnow + unitlen)){btnleft.click();}else if (($(this).position().left + $(unit).outerWidth() + unitlen) > (offsetnow+viewedSize) ){btnright.click();}});});settings.dir=="H" ? scrollobj.css("left","0px") : scrollobj.css("top","0px");if(scrollobjSize>viewedSize){if(settings.loop=="cycle"){btnleft.removeClass("jtgrayleft");if(scrollunits.length<2*numtoMove+unitdisplayed-numtoMove){scrollobj.find("li").clone().appendTo(scrollobj);}}else{btnleft.addClass("jtgrayleft");offset=scrollobjSize-viewedSize;}btnright.removeClass("jtgrayright");}else{btnleft.addClass("jtgrayleft");btnright.addClass("jtgrayright");}btnleft.click(function(){if($(this).is("[class*='jtgrayleft']")){return false;}if(!moving){moving=true;if(settings.loop=="cycle"){scrollobj.find("li:gt("+(scrollunits.length-numtoMove-1)+")").prependTo(scrollobj);scrollobj.css(pos,"-"+movelength+"px");$.fn.Xslider.sn.animate(scrollobj,0,settings.dir,settings.speed,function(){moving=false;});}else{offsetnow-=movelength;if(offsetnow>unitlen*unitdisplayed-viewedSize){$.fn.Xslider.sn.animate(scrollobj,-offsetnow,settings.dir,settings.speed,function(){moving=false;});}else{$.fn.Xslider.sn.animate(scrollobj,0,settings.dir,settings.speed,function(){moving=false;});offsetnow=0;$(this).addClass("jtgrayleft");}btnright.removeClass("jtgrayright");}}return false;});btnright.click(function(){if($(this).is("[class*='jtgrayright']")){return false;}if(!moving){moving=true;if(settings.loop=="cycle"){var callback=function(){scrollobj.find("li:lt("+numtoMove+")").appendTo(scrollobj);scrollobj.css(pos,"0px");moving=false;};$.fn.Xslider.sn.animate(scrollobj,-movelength,settings.dir,settings.speed,callback);}else{offsetnow+=movelength;if(offsetnow<offset-(unitlen*unitdisplayed-viewedSize)){$.fn.Xslider.sn.animate(scrollobj,-offsetnow,settings.dir,settings.speed,function(){moving=false;});}else{$.fn.Xslider.sn.animate(scrollobj,-offset,settings.dir,settings.speed,function(){moving=false;});//滚动到最后一个位置;offsetnow=offset;$(this).addClass("jtgrayright");}btnleft.removeClass("jtgrayleft");}}return false;});if(settings.autoscroll){$.fn.Xslider.sn.autoscroll($(this),settings.autoscroll);}});};$.fn.Xslider.sn={defaults:{dir:"H",speed:500},animate:function(obj,w,dir,speed,callback){if(dir=="H"){obj.animate({"left":w},speed,"easeInSine",callback);}else if(dir=="V"){obj.animate({"top":w},speed,"easeInSine",callback);}},autoscroll:function(obj,time){var  vane="right";function autoscrolling(){if(vane=="right"){if(!obj.find("p.jtgrayright").length){obj.find("p.jtright").trigger("click");}else{vane="left";}}if(vane=="left"){if(!obj.find("p.jtgrayleft").length){obj.find("p.jtleft").trigger("click");}else{vane="right";}}}var scrollTimmer=setInterval(autoscrolling,time);obj.hover(function(){clearInterval(scrollTimmer);},function(){scrollTimmer=setInterval(autoscrolling,time);});}};})(jQuery);


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 2岁宝宝有口臭是怎么办 两岁宝宝有口气怎么办 2岁宝宝口气重是什么原因怎么办 两岁宝宝口气重怎么办 两岁宝宝有口臭怎么办 两岁身高不达标怎么办 两岁宝宝82厘米怎么办 2岁幼儿说话结巴怎么办 2岁的宝宝结巴怎么办 2岁半宝宝口吃怎么办 2周岁宝宝不说话怎么办 三周岁宝宝不说话怎么办 2周岁宝宝突然说话结巴怎么办 两周岁宝宝突然说话结巴怎么办 三周岁宝宝说话突然结巴怎么办 小孩g和d不分怎么办 两岁宝宝皮肤黑怎么办 2岁宝宝肤色偏黄怎么办 2岁宝宝迷上手机怎么办 2岁宝宝说话口吃怎么办 两岁宝宝突然口吃怎么办 两岁半的宝宝还不会说话怎么办 2岁宝宝自闭症怎么办呀 新生儿又吐又拉怎么办 一岁多宝宝受凉呕吐拉稀怎么办 7个月的宝宝腹泻怎么办 两岁宝宝拉稀水怎么办 2岁宝宝发烧呕吐怎么办 1岁宝宝着凉呕吐怎么办 2岁着凉了呕吐怎么办 2岁宝宝着凉呕吐怎么办 两岁宝宝偏矮怎么办 2岁宝贝吐没精神怎么办 11个月的宝宝吐怎么办 二岁的宝宝吐了怎么办 十个月小孩吐了怎么办 10个月宝宝呕吐怎么办 小孩又拉又吐的怎么办 小孩子不吃饭呕吐拉肚子怎么办 小孩发烧后又吐怎么办 11个月宝宝吐了怎么办