123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- (function($){
- $.fn.cxScroll=function(settings){
- if(!this.length){return;};
- settings=$.extend({},$.cxScroll.defaults,settings);
- var obj=this;
- var scroller={};
- scroller.fn={};
- scroller.box=obj.find(".box");
- scroller.list=scroller.box.find(".list");
- scroller.items=scroller.list.find("li");
- scroller.itemSum=scroller.items.length;
- if(scroller.itemSum<=1){return;};
- scroller.plusBtn=obj.find(".plus");
- scroller.minusBtn=obj.find(".minus");
- scroller.itemWidth=scroller.items.outerWidth();
- scroller.itemHeight=scroller.items.outerHeight();
- if(settings.direction=="left"||settings.direction=="right"){
- if(scroller.itemWidth*scroller.itemSum<=scroller.box.outerWidth()){return;};
- scroller.plusVal="left";
- scroller.minusVal="right";
- scroller.moveVal=scroller.itemWidth;
- }else{
- if(scroller.itemHeight*scroller.itemSum<=scroller.box.outerHeight()){return;};
- scroller.plusVal="top";
- scroller.minusVal="bottom";
- scroller.moveVal=scroller.itemHeight;
- };
- // 元素:左右操作按钮
- if(settings.plus&&!scroller.plusBtn.length){
- scroller.plusBtn=$("<a></a>",{"class":"plus"}).appendTo(obj);
- };
- if(settings.minus&&!scroller.minusBtn.length){
- scroller.minusBtn=$("<a></a>",{"class":"minus"}).appendTo(obj);
- };
- // 元素:后补
- scroller.list.append(scroller.list.html());
- // 方法:开始
- scroller.fn.on=function(){
- if(!settings.auto){return;};
- scroller.fn.off();
- scroller.run=setTimeout(function(){
- scroller.fn.goto(settings.direction);
- },settings.time);
- };
- // 方法:停止
- scroller.fn.off=function(){
- if(typeof(scroller.run)!=="undefined"){clearTimeout(scroller.run);};
- };
- // 方法:增加控制
- scroller.fn.addControl=function(){
- if(settings.plus&&scroller.minusBtn.length){
- scroller.plusBtn.bind("click",function(){
- scroller.fn.goto(scroller.plusVal);
- });
- };
- if(settings.minus&&scroller.minusBtn.length){
- scroller.minusBtn.bind("click",function(){
- scroller.fn.goto(scroller.minusVal);
- });
- };
- };
- // 方法:解除控制
- scroller.fn.removeControl=function(){
- if(scroller.plusBtn.length){scroller.plusBtn.unbind("click");};
- if(scroller.minusBtn.length){scroller.minusBtn.unbind("click");};
- };
- // 方法:滚动
- scroller.fn.goto=function(d){
- scroller.fn.off();
- scroller.fn.removeControl();
- scroller.box.stop(true);
- var _max; // _max 滚动的最大限度
- var _dis; // _dis 滚动的距离
- switch(d){
- case "left":
- case "top":
- _max=0;
- if(d=="left"){
- if(parseInt(scroller.box.scrollLeft(),10)==0){
- scroller.box.scrollLeft(scroller.itemSum*scroller.moveVal);
- };
- _dis=scroller.box.scrollLeft()-(scroller.moveVal*settings.step);
- if(_dis<_max){_dis=_max};
- scroller.box.animate({"scrollLeft":_dis},settings.speed,function(){
- if(parseInt(scroller.box.scrollLeft(),10)<=_max){
- scroller.box.scrollLeft(0);
- };
- scroller.fn.addControl();
- });
- }else{
- if(parseInt(scroller.box.scrollTop(),10)==0){
- scroller.box.scrollTop(scroller.itemSum*scroller.moveVal);
- };
- _dis=scroller.box.scrollTop()-(scroller.moveVal*settings.step);
- if(_dis<_max){_dis=_max};
- scroller.box.animate({"scrollTop":_dis},settings.speed,function(){
- if(parseInt(scroller.box.scrollTop(),10)<=_max){
- scroller.box.scrollTop(0);
- };
- scroller.fn.addControl();
- });
- };
- break;
- case "right":
- case "bottom":
- _max=scroller.itemSum*scroller.moveVal;
- if(d=="right"){
- _dis=scroller.box.scrollLeft()+(scroller.moveVal*settings.step);
- if(_dis>_max){_dis=_max};
- scroller.box.animate({"scrollLeft":_dis},settings.speed,function(){
- if(parseInt(scroller.box.scrollLeft(),10)>=_max){
- scroller.box.scrollLeft(0);
- };
- });
- }else{
- _dis=scroller.box.scrollTop()+(scroller.moveVal*settings.step);
- if(_dis>_max){_dis=_max};
- scroller.box.animate({"scrollTop":_dis},settings.speed,function(){
- if(parseInt(scroller.box.scrollTop(),10)>=_max){
- scroller.box.scrollTop(0);
- };
- });
- };
- break;
- };
- scroller.box.queue(function(){
- scroller.fn.addControl();
- scroller.fn.on();
- $(this).dequeue();
- });
- };
- // 事件:鼠标移入停止,移出开始
- scroller.box.hover(function(){
- scroller.fn.off();
- },function(){
- scroller.fn.on();
- });
- scroller.fn.addControl();
- scroller.fn.on();
- };
- // 默认值
- $.cxScroll={defaults:{
- direction:"right", // 滚动方向
- step:1, // 滚动步长
- speed:800, // 滚动速度
- time:4000, // 自动滚动间隔时间
- auto:true, // 是否自动滚动
- plus:true, // 是否使用 plus 按钮
- minus:true // 是否使用 minus 按钮
- }};
- })(jQuery);
|