| ;(function($){ | 
|   | 
|     var Carousel = function(poster){ | 
|         var self = this; | 
|         //保存单个旋转木马对象 | 
|         this.poster = poster; | 
|         this.posterItemMain = poster.find("ul.poster-list"); | 
|         this.nextBtn = poster.find("div.poster-next-btn"); | 
|         this.prevBtn = poster.find("div.poster-prev-btn"); | 
|         this.posterItems = poster.find("li.poster-item"); | 
|         if( this.posterItems.size()%2 == 0 ){ | 
|             this.posterItemMain.append( this.posterItems.eq(0).clone() ); | 
|             this.posterItems = this.posterItemMain.children(); | 
|         }; | 
|         this.posterFirstItem = this.posterItems.first(); | 
|         this.posterLastItem = this.posterItems.last(); | 
|         this.rotateFlag = true; | 
|         //默认配置参数 | 
|         this.setting = { | 
|             "width" : 1000,            //幻灯片的宽度 | 
|             "height" : 315,            //幻灯片的高度 | 
|             "posterWidth" : 640,    //幻灯片第一帧的宽度 | 
|             "posterHeight" : 270,    //幻灯片第一帧的高度 | 
|             "scale" : 0.8,            //记录显示比例关系 | 
|             "speed" : 1000, | 
|             "autoPlay" : false, | 
|             "delay" : 5000, | 
|             "verticalAlign" : "middle" //top bottom | 
|         }; | 
|         $.extend( this.setting,this.getSetting() ); | 
|          | 
|         //设置配置参数值 | 
|         this.setSettingValue(); | 
|         //初始化幻灯片位置 | 
|         this.setPosterPos(); | 
|         //左旋转按钮 | 
|         this.nextBtn.click(function(){ | 
|             if(self.rotateFlag){ | 
|                 self.rotateFlag = false; | 
|                 self.carouseRotate("left"); | 
|             }; | 
|         }); | 
|         //右旋转按钮 | 
|         this.prevBtn.click(function(){ | 
|             if(self.rotateFlag){ | 
|                 self.rotateFlag = false; | 
|                 self.carouseRotate("right"); | 
|             }; | 
|         }); | 
|         //是否开启自动播放 | 
|         if(this.setting.autoPlay){ | 
|             this.autoPlay(); | 
|             this.poster.hover( function(){ | 
|                 //self.timer是setInterval的种子 | 
|                 window.clearInterval(self.timer); | 
|             }, function(){ | 
|                 self.autoPlay(); | 
|             });             | 
|         }; | 
|     }; | 
|     Carousel.prototype = { | 
|         autoPlay:function(){ | 
|             var self = this; | 
|             this.timer = window.setInterval( function(){ | 
|                 self.nextBtn.click(); | 
|             }, this.setting.delay ); | 
|         }, | 
|   | 
|         //旋转 | 
|         carouseRotate:function(dir){ | 
|             var _this_  = this; | 
|             var zIndexArr = []; | 
|             //左旋转 | 
|             if(dir === "left"){ | 
|                 this.posterItems.each(function(){ | 
|                     var self = $(this), | 
|                         prev = self.prev().get(0)?self.prev():_this_.posterLastItem, | 
|                         width = prev.width(), | 
|                         height =prev.height(), | 
|                         opacity = prev.css("opacity"), | 
|                         left = prev.css("left"), | 
|                         top = prev.css("top"), | 
|                         zIndex = prev.css("zIndex"); | 
|   | 
|                     zIndexArr.push(zIndex); | 
|                     self.animate({ | 
|                         width :width, | 
|                         height :height, | 
|                       //zIndex :zIndex, | 
|                         opacity :opacity, | 
|                         left :left, | 
|                         top :top | 
|                     },_this_.setting.speed,function(){ | 
|                         _this_.rotateFlag = true; | 
|                     }); | 
|                 }); | 
|                 //zIndex需要单独保存再设置,防止循环时候设置再取的时候值永远是最后一个的zindex | 
|                 this.posterItems.each(function(i){ | 
|                     $(this).css("zIndex",zIndexArr[i]); | 
|                 }); | 
|             }else if(dir === "right"){//右旋转 | 
|                 this.posterItems .each(function(){ | 
|                     var self = $(this), | 
|                         next = self.next().get(0)?self.next():_this_.posterFirstItem, | 
|                         width = next.width(), | 
|                         height =next.height(), | 
|                         opacity = next.css("opacity"), | 
|                         left = next.css("left"), | 
|                         top = next.css("top"), | 
|                         zIndex = next.css("zIndex"); | 
|   | 
|                     zIndexArr.push(zIndex);                     | 
|                     self.animate({ | 
|                         width :width, | 
|                         height :height, | 
|                       //zIndex :zIndex, | 
|                         opacity :opacity, | 
|                         left :left, | 
|                         top :top | 
|                     },_this_.setting.speed,function(){ | 
|                         _this_.rotateFlag = true; | 
|                     });     | 
|                 }); | 
|                 //zIndex需要单独保存再设置,防止循环时候设置再取的时候值永远是最后一个的zindex | 
|                 this.posterItems.each(function(i){ | 
|                     $(this).css("zIndex",zIndexArr[i]); | 
|                 }); | 
|             }; | 
|         }, | 
|         //设置剩余的帧的位置关系 | 
|         setPosterPos:function(){ | 
|             var self = this, | 
|                 sliceItems = this.posterItems.slice(1), | 
|                 sliceSize = sliceItems.size()/2, | 
|                 rightSlice = sliceItems.slice(0,sliceSize), | 
|                 //存在图片奇偶数问题 | 
|                 level = Math.floor(this.posterItems.size()/2), | 
|                 leftSlice = sliceItems.slice(sliceSize); | 
|              | 
|             //设置右边帧的位置关系和宽度高度top | 
|             var firstLeft = (this.setting.width - this.setting.posterWidth)/2; | 
|             var rw = this.setting.posterWidth, | 
|                 fixOffsetLeft = firstLeft + rw, | 
|                 rh = this.setting.posterHeight, | 
|                 gap = ((this.setting.width - this.setting.posterWidth)/2)/level; | 
|              | 
|             //设置右边位置关系 | 
|             rightSlice.each(function(i){ | 
|                 level--; | 
|                 rw = rw * self.setting.scale; | 
|                 rh = rh * self.setting.scale; | 
|                 var j = i; | 
|                 $(this).css({ | 
|                     zIndex :level, | 
|                     width :rw, | 
|                     height :rh, | 
|                     opacity :1/(++j), | 
|                     left :fixOffsetLeft+(++i)*gap - rw, | 
|                     top :self.setVerticalAlign(rh) | 
|                 }); | 
|             }); | 
|   | 
|             //设置左边的位置关系 | 
|             var lw = rightSlice.last().width(), | 
|                 lh  =rightSlice.last().height(), | 
|                 oloop = Math.floor(this.posterItems.size()/2); | 
|             leftSlice.each(function(i){ | 
|                 $(this).css({ | 
|                     zIndex:i, | 
|                     width:lw, | 
|                     height:lh, | 
|                     opacity:1/oloop, | 
|                     left:i*gap, | 
|                     top:self.setVerticalAlign(lh) | 
|                 }); | 
|                 lw = lw/self.setting.scale; | 
|                 lh = lh/self.setting.scale; | 
|                 oloop--; | 
|             }); | 
|         }, | 
|      | 
|         //设置垂直排列对齐 | 
|         setVerticalAlign:function(height){ | 
|             var verticalType  = this.setting.verticalAlign, | 
|                 top = 0; | 
|             if(verticalType === "middle"){ | 
|                 top = (this.setting.height-height)/2; | 
|             }else if(verticalType === "top"){ | 
|                 top = 0; | 
|             }else if(verticalType === "bottom"){ | 
|                 top = this.setting.height-height; | 
|             }else{ | 
|                 top = (this.setting.height-height)/2; | 
|             }; | 
|             return top; | 
|         }, | 
|   | 
|         //设置配置参数值去控制基本的宽度高度。。。 | 
|         setSettingValue:function(){ | 
|             this.poster.css({ | 
|                 width:this.setting.width, | 
|                 height:this.setting.height | 
|             }); | 
|             this.posterItemMain.css({ | 
|                 width:this.setting.width, | 
|                 height:this.setting.height | 
|             }); | 
|             //计算上下切换按钮的宽度 | 
|             var w = (this.setting.width-this.setting.posterWidth)/2; | 
|             //设置切换按钮的宽高,层级关系 | 
|             this.nextBtn.css({ | 
|                 width:w, | 
|                 height:this.setting.height, | 
|                 zIndex:Math.ceil(this.posterItems.size()/2) | 
|             }); | 
|             this.prevBtn.css({ | 
|                 width:w, | 
|                 height:this.setting.height, | 
|                 zIndex:Math.ceil(this.posterItems.size()/2) | 
|             });             | 
|             this.posterFirstItem.css({ | 
|                 width:this.setting.posterWidth, | 
|                 height:this.setting.posterHeight, | 
|                 left:w, | 
|                 top:0, | 
|                 zIndex:Math.floor(this.posterItems.size()/2) | 
|             }); | 
|         }, | 
|   | 
|         //获取人工配置参数 | 
|         getSetting:function(){             | 
|             var setting = this.poster.attr("data-setting"); | 
|             if(setting && setting != ""){ | 
|                 return $.parseJSON(setting); | 
|             }else{ | 
|                 return {}; | 
|             }; | 
|         }     | 
|     }; | 
|   | 
|     Carousel.init = function(posters){ | 
|         var _this_ = this; | 
|         posters.each(function(){ | 
|             console.log("halo Louis;") | 
|             new  _this_($(this)); | 
|         }); | 
|     }; | 
|   | 
|     //挂载到window下 | 
|     window["Carousel"] = Carousel; | 
|   | 
| })(jQuery); |