jquery制作多功能轮播图插件
这是一款多功能幻灯片插件,支持多种配置,css样式是扒的网上的,里面的代码原创,轻喷~
;(function($){
"usestrict";
varmethods={
o:{
next:"#cycle-next",
prev:"#cycle-prev",
pager:"#cycle-nav",
slider:"#beauty-slider",
timeLine:"#timeLine",
innerTimeLine:"#inner-timeLine",
timeLineNode:"#timeLine-node",
sliderItemClass:"sliderItem",
nodeActive:"node_active",
displays:{fade:"fade",left:"left",right:"right",top:"top",bottom:"bottom"},
navHtml:"<ahref='javascript:;'class='&'>?</a>",
navConfig:{navBoxClass:"cycle-nav",navActiveClass:"activeSlide",showNum:true}
},
generateId:function(){
return"-"+newDate().getTime();
},
generateTemplate:function(id,settings){
varhtmls=newArray();
htmls.push('<divclass="slider-wrap">');
htmls.push('<divclass="cycleslider-wrap">');
htmls.push('<divid="beauty-slider'+id+'"class="cycleslider"></div>');
if(settings.isArrow){
htmls.push('<aid="cycle-prev'+id+'"class="cycle-prev"href="javascript:;"title="试试左方向键翻页">Prev</a>');
htmls.push('<aid="cycle-next'+id+'"class="cycle-next"href="javascript:;"title="试试右方向键翻页">Next</a>');
}
if(settings.showTimeLine){
htmls.push('<divclass="timeLine"id="timeLine'+id+'">');
htmls.push('<divclass="innerTimeLine"id="inner-timeLine'+id+'"style="width:0px;"> </div>');
htmls.push('<divid="timeLine-node'+id+'"></div>');
htmls.push('</div>');
}
if(settings.isNav){
htmls.push('<divid="cycle-nav'+id+'"class="cycle-nav"></div>');
}
htmls.push('</div>');
htmls.push('<divclass="loader"></div>');
htmls.push('</div>');
returnhtmls;
},
init:function(dom,options){
vars=this;
vardefaults={url:"",data:{},auto:false,time:2000,overLay:false,isArrow:true,isNav:true,showTimeLine:false,showTip:false,keyboard:true,display:s.o.displays.fade,navConfig:s.o.navConfig};
varsettings=$.extend({},defaults,options);
varid=s.generateId();
$(".slider-wrap.loader").show();
varimgArray=s.returnImgArray(dom,settings);
if(imgArray!=null&&imgArray.length>0){
s["imgcnt"+id]=imgArray.length;
$(dom).html(s.generateTemplate(id,settings).join('')).show();
varslider=$(s.o.slider+id);
varpager=$(s.o.pager+id);
vartimeLineNode=$(s.o.timeLineNode+id);
s.o.innerW=$(dom).width()-20;
varimgHtml="";
varpageHtml="";
vartimeHtml="";
$.each(imgArray,function(index,item){
varpicClass=index==0?s.o.sliderItemClass:s.o.sliderItemClass+"none";
varnavClass=index==0?settings.navConfig.navActiveClass:"";
imgHtml+='<divclass="'+picClass+'"><ahref="'+(s.isParamValid(item.picUrl)?item.picUrl:"javascript:;")+'"><imgsrc="'+item.picPath+'"width="'+item.width+'"height="'+item.height+'"title="'+item.title+'"/></a></div>';
pageHtml+=s.o.navHtml.replace("?",settings.navConfig.showNum?index+1:"").replace("&",navClass);
varleft=s.o.innerW*index/s["imgcnt"+id]-13;
varnodeClass=index==0?s.o.nodeActive:"";
timeHtml+='<divclass="node'+nodeClass+'"style="left:'+left+'px;">';
if(settings.showTip){
timeHtml+='<divclass="tooltip">'+item.title+'</div>';
}
timeHtml+='</div>';
});
slider.html(imgHtml);
if(settings.isNav){
if(settings.navConfig.navBoxClass){
pager.removeClass(s.o.navConfig.navBoxClass).addClass(settings.navConfig.navBoxClass);
}
pager.html(pageHtml);
}
if(settings.showTimeLine){
timeLineNode.html(timeHtml);
}
slider.width(s.o.innerW);
slider.find("."+s.o.sliderItemClass).width(s.o.innerW);
$(s.o.timeLine+id).width(s.o.innerW);
if(settings.overLay){
if($.fn.layerModel){
$(dom).layerModel({staySame:true,blurClose:true});
}else{
alert("请先引入layerModel插件!");
}
}
s.initBind(id,settings);
s["currentIndex"+id]=0;
vartotalTime=settings.time/1000*s["imgcnt"+id];
if(settings.auto){
if(settings.showTimeLine){
s.startTimeLine(id,totalTime,settings);
}else{
s.o.timeInterval=window.setInterval(function(){
$("#cycle-next"+id).click();
},settings.time);
}
}
}else{
return;
}
returndom;
},
startTimeLine:function(id,time,settings){
vars=this;
var$innerTimeLine=$(s.o.innerTimeLine+id);
varcrnW=$innerTimeLine.width();
for(vari=0;i<s["imgcnt"+id];i++){
varautoW=Math.floor(s.o.innerW*i/s["imgcnt"+id]);
if(crnW==autoW){
s["currentIndex"+id]=i;
s.updateImgLink(id,settings);
$(s.o.timeLineNode+id).find("div.node").eq(i).addClass(s.o.nodeActive).siblings().removeClass(s.o.nodeActive);
}
}
if(crnW<s.o.innerW){
$innerTimeLine.animate({width:"+=1px"},time,'linear',function(){
s.startTimeLine(id,time,settings);
});
}else{
$innerTimeLine.width(0);
s.startTimeLine(id,time,settings);
}
},
initBind:function(id,settings){
vars=this;
varisEasing=$.easing.def;
if(settings.isArrow){
$("#cycle-prev"+id+",#cycle-next"+id).css({opacity:"0"});
$(".cycleslider-wrap").hover(function(){
$("#cycle-prev"+id).stop().animate({left:"-31",opacity:"1"},200,isEasing?"easeOutCubic":"");
$("#cycle-next"+id).stop().animate({right:"-31",opacity:"1"},200,isEasing?"easeOutCubic":"");
},function(){
$("#cycle-prev"+id).stop().animate({left:"-50",opacity:"0"},400,isEasing?"easeInCubic":"");
$("#cycle-next"+id).stop().animate({right:"-50",opacity:"0"},400,isEasing?"easeInCubic":"");
});
$("#cycle-prev"+id).bind("click",function(){
s["currentIndex"+id]=s["currentIndex"+id]<=0?s["imgcnt"+id]-1:s["currentIndex"+id]-1;
s.updateImgLink(id,settings);
});
$("#cycle-next"+id).bind("click",function(){
s["currentIndex"+id]=s["currentIndex"+id]<s["imgcnt"+id]-1?s["currentIndex"+id]+1:0;
s.updateImgLink(id,settings);
});
}
$(".slider-wrap.loader").hide();
$("a",s.o.pager+id).bind("click",function(){
if($(this).hasClass(s.o.navConfig.navActiveClass)){
returnfalse;
}
s["currentIndex"+id]=$(this).index();
s.updateImgLink(id,settings);
});
if(settings.auto&&settings.showTimeLine){
$("div.node",s.o.timeLineNode+id).bind({
click:function(){
if($(this).hasClass(s.o.nodeActive)){
returnfalse;
}
s["currentIndex"+id]=$(this).index();
s.updateImgLink(id,settings);
},
mouseover:function(){
if(settings.showTip){
$(this).find(".tooltip").fadeIn();
}
},
mouseout:function(){
if(settings.showTip){
$(this).find(".tooltip").fadeOut();
}
}
});
}
//键盘操作
if(settings.keyboard){
$(window).keydown(function(event){
//<---
if(event.keyCode==37){
$("#cycle-prev"+id).click();
}
//--->
if(event.keyCode==39){
$("#cycle-next"+id).click();
}
});
}
},
updateImgLink:function(id,settings){
vars=this;
varindex=s["currentIndex"+id];
vardisplay=settings.display;
varisEasing=$.easing.def;
var$items=$("div."+s.o.sliderItemClass,s.o.slider+id);
switch(display){
cases.o.displays.fade:
$items.eq(index).show().siblings().hide();
break;
cases.o.displays.left:
$items.css({position:"absolute",top:0,left:s.o.innerW}).hide();
$items.eq(index).animate({left:0},100,isEasing?"easeOutCubic":"").show();
$(s.o.slider+id).height(s.getImgMaxHeight(id));
break;
cases.o.displays.right:
$items.css({position:"absolute",top:0,right:s.o.innerW}).hide();
$items.eq(index).animate({right:0},100,isEasing?"easeOutCubic":"").show();
$(s.o.slider+id).height(s.getImgMaxHeight(id));
break;
cases.o.displays.top:
break;
cases.o.displays.bottom:
break;
default:
break;
}
$("a",s.o.pager+id).eq(index).addClass(settings.navConfig.navActiveClass).siblings().removeClass(settings.navConfig.navActiveClass);
//更新进度条的信息
if(settings.auto&&settings.showTimeLine){
varindexWidth=Math.floor(s.o.innerW*index/s["imgcnt"+id]);
$(s.o.innerTimeLine+id).animate({width:indexWidth+"px"},500,'linear',function(){
$(s.o.timeLineNode+id).find("div.node").eq(index).addClass(s.o.nodeActive).siblings().removeClass(s.o.nodeActive);
});
}
},
getImgMaxHeight:function(id){
vars=this;
varslider=$(s.o.slider+id);
varmaxHeight=0;
$.each(slider.find("img"),function(index,item){
varimgHeight=this.height;
maxHeight=Math.max(maxHeight,imgHeight);
});
returnmaxHeight;
},
returnImgArray:function(dom,settings){
vars=this;
varimgArray=newArray();
varurl=settings.url;
if(s.isParamValid(url)){
$.ajax({
url:url+"?t="+newDate().getTime(),
type:'POST',
async:false,
data:settings.data,
dataType:'json',
success:function(data){
if(s.isParamValid(data)){
$.each(data,function(index,item){
imgArray.push(item);
});
}
},
error:function(){
alert("图片数据源地址无效...");
returnnull;
},
complete:function(XHR,TS){XHR=null;}
});
}else{
varimgs=$(dom).find("img");
if(imgs!=null&&imgs.length>0){
$.each(imgs,function(i,o){
varpic=newObject();
pic.picUrl=$(o).parent("a").attr("href");
pic.picPath=$(o).attr("src");
pic.width=$(o).attr("width");
pic.height=$(o).attr("height");
pic.title=$(o).attr("title");
imgArray.push(pic);
});
}
}
returnimgArray;
},
isParamValid:function(v){
return!(v==""||v==null||v==undefined);
}
};
$.fn.beautyFocus=function(options){
returnthis.each(function(index,item){
methods.init(item,options);
});
};
})(jQuery);
以上所述就是本文的全部内容了,希望大家能够喜欢。