/* 代码整理:大头网 www.datouwang.com */ ;(function($){ //定义piccarousel类 var piccarousel = (function(){ //定义piccarousel的构造函数 function piccarousel(element,options){ this.settings = $.extend(true,$.fn.piccarousel.defaults,options||{}); this.element = element; this.init(); } //定义piccarousel的方法 piccarousel.prototype = { /*说明:初始化插件*/ init:function(){ var me = this; me.poster = me.element; me.posteritemmain = me.poster.find("ul.poster-list"); me.nextbtn = me.poster.find("div.poster-next-btn"); me.prevbtn = me.poster.find("div.poster-prev-btn"); me.posteritems = me.poster.find("li.poster-item"); if(me.posteritems.size()%2 == 0){ me.posteritemmain.append(me.posteritems.ep(0).clone()); me.posteritems = me.posteritemmain.children; } me.posterfirstitem = me.posteritems.first(); me.posterlastitem = me.posteritems.last(); me.rotateflag =true; //设置配置参数值 me.setsettingvalue(); me.setposterpost(); me.nextbtn.click(function(){ if(me.rotateflag){ me.rotateflag = false; me.carouserotate("left"); }; }); me.prevbtn.click(function(){ if(me.rotateflag){ me.rotateflag = false; me.carouserotate("right"); }; }); //是否开启自动播放 if(me.settings.autoplay){ me.autoplay(); me.poster.hover(function(){ window.clearinterval(me.timer); },function(){ me.autoplay(); }); } }, //自动播放方法 autoplay:function(){ var me = this; me.timer = window.setinterval(function(){ me.nextbtn.click(); },me.settings.delay); }, //旋转方法 carouserotate:function(dir){ var me = this; var zindexarr = []; if(dir === "left"){ me.posteritems.each(function(){ var self = $(this), prev = self.prev().get(0)?self.prev():me.posterlastitem, width = prev.width(), height = prev.height(), zindex = prev.css("zindex"), opacity = prev.css("opacity"), left = prev.css("left"), top = prev.css("top"); zindexarr.push(zindex); self.animate({ width:width, height:height, opacity:opacity, left:left, top:top },me.settings.speed,function(){ me.rotateflag = true; }); }); me.posteritems.each(function(i){ $(this).css("zindex",zindexarr[i]); }) }else if(dir === "right"){ me.posteritems.each(function(){ var self = $(this), next = self.next().get(0)?self.next():me.posterfirstitem, width = next.width(), height = next.height(), zindex = next.css("zindex"), opacity = next.css("opacity"), left = next.css("left"), top = next.css("top"); zindexarr.push(zindex); self.animate({ width:width, height:height, opacity:opacity, left:left, top:top },me.settings.speed,function(){ me.rotateflag = true; }); }); me.posteritems.each(function(i){ $(this).css("zindex",zindexarr[i]); }) } }, //设置剩余的帧的位置关系 setposterpost:function(){ var me = this; var sliceitems = me.posteritems.slice(1), slicesize = sliceitems.size()/2, rightslice = sliceitems.slice(0,slicesize), level = math.floor(me.posteritems.size()/2), leftslice = sliceitems.slice(slicesize); //设置右边帧的位置关系和宽度、高度、top... var rw = me.settings.posterwidth, rh = me.settings.posterheight, //((容器宽-帧宽)/2)/层级 190 gap = ((me.settings.width-me.settings.posterwidth)/2)/level; var firstleft = (me.settings.width-me.settings.posterwidth)/2; var fixoffsetleft = firstleft + rw; //设置右边的位置关系 rightslice.each(function(i){ level--; rw = rw*me.settings.scale; rh = rh*me.settings.scale; var j=i; $(this).css({ zindex:level, width:rw, height:rh, opacity:1/(++j), left:fixoffsetleft+(++i)*gap-rw, top:me.setvertucalalign(rh) }); }); //设置左边的位置关系 var lw = rightslice.last().width(), lh = rightslice.last().height(), oloop = math.floor(me.posteritems.size()/2); leftslice.each(function(i){ $(this).css({ zindex:i, width:lw, height:lh, opacity:1/oloop, left:i*gap, top:me.setvertucalalign(lh) }); lw = lw/me.settings.scale; lh = lh/me.settings.scale; oloop--; }); }, //设置垂直排列对齐 setvertucalalign:function(height){ var me = this; var verticaltype = me.settings.verticalalign, top = 0; if(verticaltype === "middle"){ top = (me.settings.height - height)/2; }else if(verticaltype === "top"){ top = 0; }else if(verticaltype === "bottom"){ top = me.settings.height - height; }else{ top = (me.settings.height-height)/2; }; return top; }, //配置左右按钮和第一帧位置 setsettingvalue:function(){ var me = this; me.poster.css({ width:me.settings.width, height:me.settings.height }); me.posteritemmain.css({ width:me.settings.width, height:me.settings.height }); //计算左右切换按钮的宽度 var w = (me.settings.width-me.settings.posterwidth)/2; me.nextbtn.css({ // width:w, width:140, height:me.settings.height, zindex:math.ceil(me.posteritems.size()/2) }); me.prevbtn.css({ // width:w, width:140, height:me.settings.height, zindex:math.ceil(me.posteritems.size()/2) }); me.posterfirstitem.css({ width:me.settings.posterwidth, height:me.settings.posterheight, top: me.setvertucalalign(me.settings.posterheight), left:w, zindex:math.floor(me.posteritems.size()/2) }); } }; return piccarousel; })(); //单例模式,添加piccarousel方法 $.fn.piccarousel = function(options){ return this.each(function(){ var me = $(this), instance = me.data("piccarousel"); if(!instance){ instance = new piccarousel(me,options); me.data("piccarousel",instance); } }); }; //默认配置参数 $.fn.piccarousel.defaults = { "width":1000, //幻灯片的宽度 "height":300, //幻灯片的高度 "posterwidth":520, //幻灯片第一帧的宽度 "posterheight":300, //幻灯片第一张的高度 "scale":0.9, //记录显示比例关系 "speed":300, //记录幻灯片滚动速度 "autoplay":false, //是否开启自动播放 "delay":500, //自动播放间隔 "verticalalign":"middle" //图片对齐位置 } }(jquery));