;(function($){
$.fn.jcimgscroll = function(options) {
var defaults = {
speed : 400,
width : 618,
height : 342,
offsetx : 100,
setzoom : .7,
loadclass : "loading",
position:"center",
count :5,
arrow : {
width:110,
height:342,
x:20,
y:0
},
numbtn : false,
setnumbtn : {
width : 19,
height : 18,
x : 0,
y : 362
},
title:true,
settitle : {
height:35,
border:8,
bgcolor:"#1f63aa",
color:"#fff",
padding:20,
opacity:.8
}
};
var options = $.extend(defaults,options);
return this.each(function() {
var _self = $(this),
_arrdata = [],
_idx = 0,
_center = 0,
$imglist = $("a",_self),
$imgwrap = $("ul",_self),
$imgwraplist = $("li",$imgwrap),
fngetindexarr = function(index,len){ // 当前索引,长度
var arrcurridx = [index];
for(b=0;b<=len;b++){
arrcurridx.push(index+(b+1));
arrcurridx.unshift(index-(b+1)<0?99:index-(b+1));
};
return arrcurridx;
},
setsize = function(dom,l,t,w,h,z,s){
dom.show()
.css("z-index",z)
.animate({"top":t,"left":l,"height":h,"width":w},s);
};
//初始化dom对象
object = function(length){
this.length = length;
this.setnum = options.setnumbtn;
this.numbtndom = function(list,w,h,l,t){
return "
"+ list +"";
};
this.arrow = function(l,r,w,h,x,y){
return "";
};
this.hoverdom = function(t,w,h,b,bg,p,c,lh){
return ""+ t +"";
};
};
//初始化获取dom数据
object.prototype.initial = function(callback){
if(options.count > this.length) { //this.length
alert("\"count\" parameter can not be greater than the total number of pictures, you must base !");
return false;
} else if(options.count < 0) {
alert("\"count\" parameter can not be negative, you must base !");
return false;
} else if(options.count%2 === 0) {
alert("\"count\" parameter must base !");
return false;
};
this.arrnumlist = [];
this.arrimgobj = [];
this.arrdata = [];
this.centeridx = math.round(this.length/2)-1;
this.centercount = math.floor(options.count/2)-1,
_idx = this.centeridx;
_center = this.centercount;
this.indexarr = fngetindexarr(this.centeridx,this.centercount); //获取当前索引组
//console.log(this.indexarr)
$imgwrap.css({"position":"relative","width":options.width,"height":options.height,"margin":"0 auto"});
var a=null,b=null,c=null,stmpdd=null,t=2,t2=this.centercount+1,
cenidxarr = this.indexarr[this.centercount+1],
wrapl = $imgwrap.offset().left,
wrapr = $imgwrap.offset().left+options.width,
setpos = function(mode,height){
var npos = null;
switch(mode){
case "top" :
npos = 0;
break;
case "center" :
npos = (options.height - height)*0.5;
break;
case "bottom" :
npos = options.height - height;
break;
default :
alert("parameters \"position\" error, \"top\", \"center\", \"bottom\" !")
};
return npos;
};
for(a=0;acenidxarr?a-t:a,
tmp = a>cenidxarr?a-this.centeridx:t2, //核心索引
width = math.round(options.width/tmp*options.setzoom),
height = math.round(options.height/tmp*options.setzoom),
top = math.round(setpos(options.position,height))
left = math.round(options.offsetx*tmp);
//console.log(tmp)
if(acenidxarr){
t+=2;
left = (options.width-width)+left;
};
if(a==cenidxarr){
othis.addclass("select");
width = options.width;
height = options.height;
left = 0;
top = 0;
};
setsize(othis,left,top,width,height,zindex,options.speed*1.5);
this.arrdata.push([left,top,width,height,zindex]);
break;
};
};
//输出标题dom
if(options.title){
othis.prepend(this.hoverdom(stitle,
options.width,
options.height,
options.settitle.border,
options.settitle.bgcolor,
options.settitle.padding,
options.settitle.color,
options.settitle.height
))
.find("div")
.css("opacity",0)
.end()
.find("b")
.css("opacity",0);
};
//获取数字按钮
if(options.numbtn){
var numstyle = "cursor:pointer;float:left;height:"+this.setnum.height+"px;width:"+this.setnum.width+"px;overflow:hidden;";
if(this.centeridx === a){
stmpdd = "- "+ a +"
";
} else {
stmpdd = "- "+ a +"
";
};
this.arrnumlist.push(stmpdd);
};
};
//输出箭头按钮
_self.prepend(this.arrow(wrapl,wrapr,options.arrow.width,options.arrow.height,options.arrow.x,options.arrow.y))
.find("em")
.show(0);
//输出数字按钮
if(this.arrnumlist.length !=0 ){
var numlistdom = this.arrnumlist.join(""),
numwrapwidth = this.setnum.width*this.length,
numwrapheight = this.setnum.height,
numwrapleft = (_self.width()-numwrapwidth)*0.5 + this.setnum.x;
_self.append(this.numbtndom(numlistdom,numwrapwidth,numwrapheight,numwrapleft,this.setnum.y))
.find("dl")
.show();
};
callback.call(this,this.arrimgobj);
return this.arrdata;
};
//调用对象 、操作
var o = new object($imglist.length);
_arrdata = o.initial(function(arrimg){
for(var b in arrimg){
arrimg[b].tmp = b;
arrimg[b].onload = function(){
var idx = this.tmp,
$thisimg = $imglist.eq(idx);
$thisimg.html($(arrimg[idx]))
.find("img")
.fadein(600)
.parents("li")
.removeclass(options.loadclass);
};
};
//释放对象
(function(obj){
var d=null,arg = arguments,len=arg.length;
for(d=1;d 0) {
_idx = _idx -1;
imgscroll(_idx,_arrdata,$dd);
};
return false;
});
$next.click(function(){
if(_idx < imglength-1) {
_idx = _idx + 1;
imgscroll(_idx,_arrdata,$dd);
};
return false;
});
$dd.click(function(){
_idx = $(this).index();
imgscroll(_idx,_arrdata,$dd);
});
if(options.title){
var borderwidth = options.settitle.border,
warpheight = options.height,
warpwidth = options.width,
textheight = options.settitle.height;
$("li.select",_self).live("mouseover",function(){
$(this).find("div").show().animate({"opacity":options.settitle.opacity },100);
$(this).find("b").show().delay(100).stop().animate({"height":textheight,"opacity":options.settitle.opacity},150);
return false;
})
$imgwraplist.mouseleave(function(){
$(this).find("b").show().stop().animate({"height":0,"opacity":0},150);
$(this).find("div").delay(150).stop().animate({"opacity":0 },100);
return false;
});
};
return false;
});
};
})(jquery)