﻿/*各种滚动效果封装*/
(function(jQuery){
jQuery.fn.Slide=function(options){
var opts = jQuery.extend({},jQuery.fn.Slide.deflunt,options);
var index=1;
var targetLi = jQuery("." + opts.claNav + " li", jQuery(this));//目标对象
var clickNext = jQuery("." + opts.claNav + " .next", jQuery(this));//点击下一个按钮
var clickPrev = jQuery("." + opts.claNav + " .prev", jQuery(this));//点击上一个按钮
var ContentBox = jQuery("." + opts.claCon , jQuery(this));//滚动的对象
var ContentBoxNum=ContentBox.children().size();//滚动对象的子元素个数
var slideH=ContentBox.children().first().height();//滚动对象的子元素个数高度，相当于滚动的高度
var slideW=ContentBox.children().first().width();//滚动对象的子元素宽度，相当于滚动的宽度
var autoPlay;
var slideWH;
if(opts.effect=="scroolY"||opts.effect=="scroolTxt"){
slideWH=slideH;
}else if(opts.effect=="scroolX"||opts.effect=="scroolLoop"){
ContentBox.css("width",ContentBoxNum*slideW);
slideWH=slideW;
}else if(opts.effect=="fade"){
ContentBox.children().first().css("z-index","1");
}
return this.each(function() {
var jQuerythis=jQuery(this);
//滚动函数
var doPlay=function(){
jQuery.fn.Slide.effect[opts.effect](ContentBox, targetLi, index, slideWH, opts);
index++;
if (index*opts.steps >= ContentBoxNum) {
index = 0;
}
};
//滚动函数
var loopPlayLeft=function(){
};
var loopPlayRight=function(){
};
clickNext.click(function(event){
jQuery.fn.Slide.effectLoop.scroolLeft(ContentBox, targetLi, index, slideWH, opts,function(){
for(var i=0;i<opts.steps;i++){
                   ContentBox.find("li:first",jQuerythis).appendTo(ContentBox);
               }
               ContentBox.css({"left":"0"});
});
event.preventDefault();
});
clickPrev.click(function(event){
for(var i=0;i<opts.steps;i++){
               ContentBox.find("li:last").prependTo(ContentBox);
           }
         ContentBox.css({"left":-index*opts.steps*slideW});
jQuery.fn.Slide.effectLoop.scroolRight(ContentBox, targetLi, index, slideWH, opts);
event.preventDefault();
});
//自动播放
if (opts.autoPlay) {
autoPlay = setInterval(doPlay, opts.timer);
ContentBox.hover(function(){
if(autoPlay){
clearInterval(autoPlay);
}
},function(){
if(autoPlay){
clearInterval(autoPlay);
}
autoPlay=setInterval(doPlay, opts.timer);
});
}
//目标事件
targetLi.hover(function(){
if(autoPlay){
clearInterval(autoPlay);
}
index=targetLi.index(this);
jQuery.fn.Slide.effect[opts.effect](ContentBox, targetLi, index, slideWH, opts);
},function(){
if(autoPlay){
clearInterval(autoPlay);
}
autoPlay = setInterval(doPlay, opts.timer);
});
    });
};
jQuery.fn.Slide.deflunt={
effect : "scroolY",
autoPlay:true,
speed : "normal",
timer : 1000,
defIndex : 0,
claNav:"JQ-slide-nav",
claCon:"JQ-slide-content",
steps:1
};
jQuery.fn.Slide.effectLoop={
scroolLeft:function(contentObj,navObj,i,slideW,opts,callback){
contentObj.animate({"left":-i*opts.steps*slideW},opts.speed,callback);
if (navObj) {
navObj.eq(i).addClass("on").siblings().removeClass("on");
}
},
scroolLeft:function(contentObj,navObj,i,slideW,opts,callback){
contentObj.animate({"left":-i*opts.steps*slideW},opts.speed,callback);
},
scroolRight:function(contentObj,navObj,i,slideW,opts,callback){
contentObj.animate({"left":0},opts.speed,callback);
}
}
jQuery.fn.Slide.effect={
fade:function(contentObj,navObj,i,slideW,opts){
contentObj.children().eq(i).animate({opacity:1},opts.speed).css({"z-index": "1"}).siblings().animate({opacity: 0},opts.speed).css({"z-index":"0"});
navObj.eq(i).addClass("on").siblings().removeClass("on");
},
scroolTxt:function(contentObj,undefined,i,slideH,opts){
//alert(i*opts.steps*slideH);
contentObj.animate({"margin-top":-opts.steps*slideH},opts.speed,function(){
                for( var j=0;j<opts.steps;j++){
                contentObj.find("li:first").appendTo(contentObj);
                }
                contentObj.css({"margin-top":"0"});
            });
},
scroolX:function(contentObj,navObj,i,slideW,opts,callback){
contentObj.animate({"left":-i*opts.steps*slideW},opts.speed,callback);
if (navObj) {
navObj.eq(i).addClass("on").siblings().removeClass("on");
}
},
scroolY:function(contentObj,navObj,i,slideH,opts){
contentObj.animate({"top":-i*opts.steps*slideH},opts.speed);
if (navObj) {
navObj.eq(i).addClass("on").siblings().removeClass("on");
}
}
};
})(jQuery);
