/*!
* superslide v2.1.1
* ���ɽ����վ����чչʾ����
* �꾡��ϣ�뿴������http://www.superslide2.com/
*
* copyright 2011-2013, ����ϯ
*
* ������ԭ��������ͷ����ȩ
* �ڱ����ȩ��ǰ���¿�ӧ���ڸ��˻���ҵ��;
* v2.1.1���������ö��superslide��������returndefault:true ʱ����defaultindex��������
*/
(function ($) {
$.fn.slide = function (options) {
$.fn.slide.defaults = {
type: "slide",
effect: "fade",
autoplay: false,
delaytime: 500,
intertime: 2500,
triggertime: 150,
defaultindex: 0,
titcell: ".hd li",
maincell: ".bd",
targetcell: null,
trigger: "mouseover",
scroll: 1,
vis: 1,
titonclassname: "on",
autopage: false,
prevcell: ".prev",
nextcell: ".next",
pagestatecell: ".pagestate",
opp: false,
pnloop: true,
easing: "swing",
startfun: null,
endfun: null,
switchload: null,
playstatecell: ".playstate",
mouseoverstop: true,
defaultplay: true,
returndefault: false
};
return this.each(function () {
var opts = $.extend({}, $.fn.slide.defaults, options);
var slider = $(this);
var effect = opts.effect;
var prevbtn = $(opts.prevcell, slider);
var nextbtn = $(opts.nextcell, slider);
var pagestate = $(opts.pagestatecell, slider);
var playstate = $(opts.playstatecell, slider);
var navobj = $(opts.titcell, slider); //������Ԫ�ؽ��
var navobjsize = navobj.size();
var conbox = $(opts.maincell, slider); //����Ԫ�ظ������
var conboxsize = conbox.children().size();
var sload = opts.switchload;
var tarobj = $(opts.targetcell, slider);
/*�ַ���ת��*/
var index = parseint(opts.defaultindex);
var delaytime = parseint(opts.delaytime);
var intertime = parseint(opts.intertime);
var triggertime = parseint(opts.triggertime);
var scroll = parseint(opts.scroll);
var vis = parseint(opts.vis);
var autoplay = (opts.autoplay == "false" || opts.autoplay == false) ? false : true;
var opp = (opts.opp == "false" || opts.opp == false) ? false : true;
var autopage = (opts.autopage == "false" || opts.autopage == false) ? false : true;
var pnloop = (opts.pnloop == "false" || opts.pnloop == false) ? false : true;
var mouseoverstop = (opts.mouseoverstop == "false" || opts.mouseoverstop == false) ? false : true;
var defaultplay = (opts.defaultplay == "false" || opts.defaultplay == false) ? false : true;
var returndefault = (opts.returndefault == "false" || opts.returndefault == false) ? false : true;
var slideh = 0;
var slidew = 0;
var selfw = 0;
var selfh = 0;
var easing = opts.easing;
var inter = null; //autoplay-setinterval
var mst = null; //trigger-settimeout
var rtnst = null; //returndefault-settimeout
var titon = opts.titonclassname;
var onindex = navobj.index(slider.find("." + titon));
var oldindex = index = onindex == -1 ? index : onindex;
var defaultindex = index;
var _ind = index;
var clonenum = conboxsize >= vis ? (conboxsize % scroll != 0 ? conboxsize % scroll : scroll) : 0;
var _tar;
var ismarq = effect == "leftmarquee" || effect == "topmarquee" ? true : false;
var dostartfun = function () { if ($.isfunction(opts.startfun)) { opts.startfun(index, navobjsize, slider, $(opts.titcell, slider), conbox, tarobj, prevbtn, nextbtn) } }
var doendfun = function () { if ($.isfunction(opts.endfun)) { opts.endfun(index, navobjsize, slider, $(opts.titcell, slider), conbox, tarobj, prevbtn, nextbtn) } }
var reseton = function () { navobj.removeclass(titon); if (defaultplay) navobj.eq(defaultindex).addclass(titon) }
//��������˵�ч��
if (opts.type == "menu") {
if (defaultplay) { navobj.removeclass(titon).eq(index).addclass(titon); }
navobj.hover(
function () {
_tar = $(this).find(opts.targetcell);
var hoverind = navobj.index($(this));
mst = settimeout(function () {
index = hoverind;
navobj.removeclass(titon).eq(index).addclass(titon);
dostartfun();
switch (effect) {
case "fade": _tar.stop(true, true).animate({ opacity: "show" }, delaytime, easing, doendfun); break;
case "slidedown": _tar.stop(true, true).animate({ height: "show" }, delaytime, easing, doendfun); break;
}
}, opts.triggertime);
}, function () {
cleartimeout(mst);
switch (effect) { case "fade": _tar.animate({ opacity: "hide" }, delaytime, easing); break; case "slidedown": _tar.animate({ height: "hide" }, delaytime, easing); break; }
}
);
if (returndefault) {
slider.hover(function () { cleartimeout(rtnst); }, function () { rtnst = settimeout(reseton, delaytime); });
}
return;
}
//�����ҳ
if (navobjsize == 0) navobjsize = conboxsize; //ֻ�����ұ�ť
if (ismarq) navobjsize = 2;
if (autopage) {
if (conboxsize >= vis) {
if (effect == "leftloop" || effect == "toploop") { navobjsize = conboxsize % scroll != 0 ? (conboxsize / scroll ^ 0) + 1 : conboxsize / scroll; }
else {
var temps = conboxsize - vis;
navobjsize = 1 + parseint(temps % scroll != 0 ? (temps / scroll + 1) : (temps / scroll));
if (navobjsize <= 0) navobjsize = 1;
}
}
else { navobjsize = 1 }
navobj.html("");
var str = "";
if (opts.autopage == true || opts.autopage == "true") { for (var i = 0; i < navobjsize; i++) { str += "
" + (i + 1) + "" } }
else { for (var i = 0; i < navobjsize; i++) { str += opts.autopage.replace("$", (i + 1)) } }
navobj.html(str);
var navobj = navobj.children(); //���õ�����Ԫ�ض���
}
if (conboxsize >= vis) { //�����ݸ������ڿ��ӹ�������ִ��ч����
conbox.children().each(function () { //ȡ���ֵ
if ($(this).width() > selfw) { selfw = $(this).width(); slidew = $(this).outerwidth(true); }
if ($(this).height() > selfh) { selfh = $(this).height(); slideh = $(this).outerheight(true); }
});
var _chr = conbox.children();
var cloneele = function () {
for (var i = 0; i < vis; i++) { _chr.eq(i).clone().addclass("clone").appendto(conbox); }
for (var i = 0; i < clonenum; i++) { _chr.eq(conboxsize - i - 1).clone().addclass("clone").prependto(conbox); }
}
switch (effect) {
case "fold": conbox.css({ "position": "relative", "width": slidew, "height": slideh }).children().css({ "position": "absolute", "width": selfw, "left": 0, "top": 0, "display": "none" }); break;
case "top": conbox.wrap('').css({ "top": -(index * scroll) * slideh, "position": "relative", "padding": "0", "margin": "0" }).children().css({ "height": selfh }); break;
case "left": conbox.wrap('').css({ "width": conboxsize * slidew, "left": -(index * scroll) * slidew, "position": "relative", "overflow": "hidden", "padding": "0", "margin": "0" }).children().css({ "float": "left", "width": selfw }); break;
case "leftloop":
case "leftmarquee":
cloneele();
conbox.wrap('').css({ "width": (conboxsize + vis + clonenum) * slidew, "position": "relative", "overflow": "hidden", "padding": "0", "margin": "0", "left": -(clonenum + index * scroll) * slidew }).children().css({ "float": "left", "width": selfw }); break;
case "toploop":
case "topmarquee":
cloneele();
conbox.wrap('').css({ "height": (conboxsize + vis + clonenum) * slideh, "position": "relative", "padding": "0", "margin": "0", "top": -(clonenum + index * scroll) * slideh }).children().css({ "height": selfh }); break;
}
}
//���leftloop��toploop�������
var scrollnum = function (ind) {
var _tempcs = ind * scroll;
if (ind == navobjsize) { _tempcs = conboxsize; } else if (ind == -1 && conboxsize % scroll != 0) { _tempcs = -conboxsize % scroll; }
return _tempcs;
}
//�����
var doswitchload = function (objs) {
var changeimg = function (t) {
for (var i = t; i < (vis + t); i++) {
objs.eq(i).find("img[" + sload + "]").each(function () {
var _this = $(this);
_this.attr("src", _this.attr(sload)).removeattr(sload);
if (conbox.find(".clone")[0]) { //�������.clone
var chir = conbox.children();
for (var j = 0; j < chir.size(); j++) {
chir.eq(j).find("img[" + sload + "]").each(function () {
if ($(this).attr(sload) == _this.attr("src")) $(this).attr("src", $(this).attr(sload)).removeattr(sload)
})
}
}
})
}
}
switch (effect) {
case "fade": case "fold": case "top": case "left": case "slidedown":
changeimg(index * scroll);
break;
case "leftloop": case "toploop":
changeimg(clonenum + scrollnum(_ind));
break;
case "leftmarquee": case "topmarquee":
var curs = effect == "leftmarquee" ? conbox.css("left").replace("px", "") : conbox.css("top").replace("px", "");
var slidet = effect == "leftmarquee" ? slidew : slideh;
var mnum = clonenum;
if (curs % slidet != 0) {
var curp = math.abs(curs / slidet ^ 0);
if (index == 1) { mnum = clonenum + curp } else { mnum = clonenum + curp - 1 }
}
changeimg(mnum);
break;
}
} //doswitchload end
//ч������
var doplay = function (init) {
// ��ǰҳ״̬������ч��
if (defaultplay && oldindex == index && !init && !ismarq) return;
//����ҳ��
if (ismarq) { if (index >= 1) { index = 1; } else if (index <= 0) { index = 0; } }
else {
_ind = index; if (index >= navobjsize) { index = 0; } else if (index < 0) { index = navobjsize - 1; }
}
dostartfun();
//���������
if (sload != null) { doswitchload(conbox.children()) }
//����targetcell
if (tarobj[0]) {
_tar = tarobj.eq(index);
if (sload != null) { doswitchload(tarobj) }
if (effect == "slidedown") {
tarobj.not(_tar).stop(true, true).slideup(delaytime);
_tar.slidedown(delaytime, easing, function () { if (!conbox[0]) doendfun() });
}
else {
tarobj.not(_tar).stop(true, true).hide();
_tar.animate({ opacity: "show" }, delaytime, function () { if (!conbox[0]) doendfun() });
}
}
if (conboxsize >= vis) { //�����ݸ������ڿ��ӹ�������ִ��ч����
switch (effect) {
case "fade": conbox.children().stop(true, true).eq(index).animate({ opacity: "show" }, delaytime, easing, function () { doendfun() }).siblings().hide(); break;
case "fold": conbox.children().stop(true, true).eq(index).animate({ opacity: "show" }, delaytime, easing, function () { doendfun() }).siblings().animate({ opacity: "hide" }, delaytime, easing); break;
case "top": conbox.stop(true, false).animate({ "top": -index * scroll * slideh }, delaytime, easing, function () { doendfun() }); break;
case "left": conbox.stop(true, false).animate({ "left": -index * scroll * slidew }, delaytime, easing, function () { doendfun() }); break;
case "leftloop":
var __ind = _ind;
conbox.stop(true, true).animate({ "left": -(scrollnum(_ind) + clonenum) * slidew }, delaytime, easing, function () {
if (__ind <= -1) { conbox.css("left", -(clonenum + (navobjsize - 1) * scroll) * slidew); } else if (__ind >= navobjsize) { conbox.css("left", -clonenum * slidew); }
doendfun();
});
break; //leftloop end
case "toploop":
var __ind = _ind;
conbox.stop(true, true).animate({ "top": -(scrollnum(_ind) + clonenum) * slideh }, delaytime, easing, function () {
if (__ind <= -1) { conbox.css("top", -(clonenum + (navobjsize - 1) * scroll) * slideh); } else if (__ind >= navobjsize) { conbox.css("top", -clonenum * slideh); }
doendfun();
});
break; //toploop end
case "leftmarquee":
var templeft = conbox.css("left").replace("px", "");
if (index == 0) {
conbox.animate({ "left": ++templeft }, 0, function () {
if (conbox.css("left").replace("px", "") >= 0) { conbox.css("left", -conboxsize * slidew) }
});
}
else {
conbox.animate({ "left": --templeft }, 0, function () {
if (conbox.css("left").replace("px", "") <= -(conboxsize + clonenum) * slidew) { conbox.css("left", -clonenum * slidew) }
});
} break; // leftmarquee end
case "topmarquee":
var temptop = conbox.css("top").replace("px", "");
if (index == 0) {
conbox.animate({ "top": ++temptop }, 0, function () {
if (conbox.css("top").replace("px", "") >= 0) { conbox.css("top", -conboxsize * slideh) }
});
}
else {
conbox.animate({ "top": --temptop }, 0, function () {
if (conbox.css("top").replace("px", "") <= -(conboxsize + clonenum) * slideh) { conbox.css("top", -clonenum * slideh) }
});
} break; // topmarquee end
} //switch end
}
navobj.removeclass(titon).eq(index).addclass(titon);
oldindex = index;
if (!pnloop) { //pnloop����ǰ��ť�ƿ����ѭ��
nextbtn.removeclass("nextstop"); prevbtn.removeclass("prevstop");
if (index == 0) { prevbtn.addclass("prevstop"); }
if (index == navobjsize - 1) { nextbtn.addclass("nextstop"); }
}
pagestate.html("" + (index + 1) + "/" + navobjsize);
}; // doplay end
//��ʼ��ִ��
if (defaultplay) { doplay(true); }
if (returndefault)//����ĭ��״̬
{
slider.hover(function () { cleartimeout(rtnst) }, function () {
rtnst = settimeout(function () {
index = defaultindex;
if (defaultplay) { doplay(); }
else {
if (effect == "slidedown") { _tar.slideup(delaytime, reseton); }
else { _tar.animate({ opacity: "hide" }, delaytime, reseton); }
}
oldindex = index;
}, 300);
});
}
///�զ����ź���
var setinter = function (time) { inter = setinterval(function () { opp ? index-- : index++; doplay() }, !!time ? time : intertime); }
var setmarinter = function (time) { inter = setinterval(doplay, !!time ? time : intertime); }
// ����mouseoverstop
var resetinter = function () { if (!mouseoverstop) { clearinterval(inter); setinter() } }
// ǰ��ť����
var nexttrigger = function () { if (pnloop || index != navobjsize - 1) { index++; doplay(); if (!ismarq) resetinter(); } }
var prevtrigger = function () { if (pnloop || index != 0) { index--; doplay(); if (!ismarq) resetinter(); } }
//����playstate
var playstatefun = function () { clearinterval(inter); ismarq ? setmarinter() : setinter(); playstate.removeclass("pausestate") }
var pausestatefun = function () { clearinterval(inter); playstate.addclass("pausestate"); }
//�զ�����
if (autoplay) {
if (ismarq) {
opp ? index-- : index++; setmarinter();
if (mouseoverstop) conbox.hover(pausestatefun, playstatefun);
} else {
setinter();
if (mouseoverstop) slider.hover(pausestatefun, playstatefun);
}
}
else { if (ismarq) { opp ? index-- : index++; } playstate.addclass("pausestate"); }
playstate.click(function () { playstate.hasclass("pausestate") ? playstatefun() : pausestatefun() });
//titcell�¼�
if (opts.trigger == "mouseover") {
navobj.hover(function () { var hoverind = navobj.index(this); mst = settimeout(function () { index = hoverind; doplay(); resetinter(); }, opts.triggertime); }, function () { cleartimeout(mst) });
} else { navobj.click(function () { index = navobj.index(this); doplay(); resetinter(); }) }
//ǰ��ť�¼�
if (ismarq) {
nextbtn.mousedown(nexttrigger);
prevbtn.mousedown(prevtrigger);
//ǰ��ť����10������
if (pnloop) {
var st;
var mardown = function () { st = settimeout(function () { clearinterval(inter); setmarinter(intertime / 10 ^ 0) }, 150) }
var marup = function () { cleartimeout(st); clearinterval(inter); setmarinter() }
nextbtn.mousedown(mardown); nextbtn.mouseup(marup);
prevbtn.mousedown(mardown); prevbtn.mouseup(marup);
}
//ǰ��ťmouseover�¼�
if (opts.trigger == "mouseover") { nextbtn.hover(nexttrigger, function () { }); prevbtn.hover(prevtrigger, function () { }); }
} else {
nextbtn.click(nexttrigger);
prevbtn.click(prevtrigger);
}
}); //each end
}; //slide end
})(jquery);
jquery.easing['jswing'] = jquery.easing['swing'];
jquery.extend(jquery.easing,
{
def: 'easeoutquad',
swing: function (x, t, b, c, d) { return jquery.easing[jquery.easing.def](x, t, b, c, d); },
easeinquad: function (x, t, b, c, d) { return c * (t /= d) * t + b; },
easeoutquad: function (x, t, b, c, d) { return -c * (t /= d) * (t - 2) + b },
easeinoutquad: function (x, t, b, c, d) { if ((t /= d / 2) < 1) return c / 2 * t * t + b; return -c / 2 * ((--t) * (t - 2) - 1) + b },
easeincubic: function (x, t, b, c, d) { return c * (t /= d) * t * t + b },
easeoutcubic: function (x, t, b, c, d) { return c * ((t = t / d - 1) * t * t + 1) + b },
easeinoutcubic: function (x, t, b, c, d) { if ((t /= d / 2) < 1) return c / 2 * t * t * t + b; return c / 2 * ((t -= 2) * t * t + 2) + b },
easeinquart: function (x, t, b, c, d) { return c * (t /= d) * t * t * t + b },
easeoutquart: function (x, t, b, c, d) { return -c * ((t = t / d - 1) * t * t * t - 1) + b },
easeinoutquart: function (x, t, b, c, d) { if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b; return -c / 2 * ((t -= 2) * t * t * t - 2) + b },
easeinquint: function (x, t, b, c, d) { return c * (t /= d) * t * t * t * t + b },
easeoutquint: function (x, t, b, c, d) { return c * ((t = t / d - 1) * t * t * t * t + 1) + b },
easeinoutquint: function (x, t, b, c, d) { if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b; return c / 2 * ((t -= 2) * t * t * t * t + 2) + b },
easeinsine: function (x, t, b, c, d) { return -c * math.cos(t / d * (math.pi / 2)) + c + b },
easeoutsine: function (x, t, b, c, d) { return c * math.sin(t / d * (math.pi / 2)) + b },
easeinoutsine: function (x, t, b, c, d) { return -c / 2 * (math.cos(math.pi * t / d) - 1) + b },
easeinexpo: function (x, t, b, c, d) { return (t == 0) ? b : c * math.pow(2, 10 * (t / d - 1)) + b },
easeoutexpo: function (x, t, b, c, d) { return (t == d) ? b + c : c * (-math.pow(2, -10 * t / d) + 1) + b },
easeinoutexpo: function (x, t, b, c, d) { if (t == 0) return b; if (t == d) return b + c; if ((t /= d / 2) < 1) return c / 2 * math.pow(2, 10 * (t - 1)) + b; return c / 2 * (-math.pow(2, -10 * --t) + 2) + b },
easeincirc: function (x, t, b, c, d) { return -c * (math.sqrt(1 - (t /= d) * t) - 1) + b },
easeoutcirc: function (x, t, b, c, d) { return c * math.sqrt(1 - (t = t / d - 1) * t) + b },
easeinoutcirc: function (x, t, b, c, d) { if ((t /= d / 2) < 1) return -c / 2 * (math.sqrt(1 - t * t) - 1) + b; return c / 2 * (math.sqrt(1 - (t -= 2) * t) + 1) + b },
easeinelastic: function (x, t, b, c, d) {
var s = 1.70158; var p = 0; var a = c; if (t == 0) return b; if ((t /= d) == 1) return b + c; if (!p) p = d * .3; if (a < math.abs(c)) { a = c; var s = p / 4; }
else var s = p / (2 * math.pi) * math.asin(c / a); return -(a * math.pow(2, 10 * (t -= 1)) * math.sin((t * d - s) * (2 * math.pi) / p)) + b
},
easeoutelastic: function (x, t, b, c, d) {
var s = 1.70158; var p = 0; var a = c; if (t == 0) return b; if ((t /= d) == 1) return b + c; if (!p) p = d * .3; if (a < math.abs(c)) { a = c; var s = p / 4; }
else var s = p / (2 * math.pi) * math.asin(c / a); return a * math.pow(2, -10 * t) * math.sin((t * d - s) * (2 * math.pi) / p) + c + b
},
easeinoutelastic: function (x, t, b, c, d) {
var s = 1.70158; var p = 0; var a = c; if (t == 0) return b; if ((t /= d / 2) == 2) return b + c; if (!p) p = d * (.3 * 1.5); if (a < math.abs(c)) { a = c; var s = p / 4; }
else var s = p / (2 * math.pi) * math.asin(c / a); if (t < 1) return -.5 * (a * math.pow(2, 10 * (t -= 1)) * math.sin((t * d - s) * (2 * math.pi) / p)) + b; return a * math.pow(2, -10 * (t -= 1)) * math.sin((t * d - s) * (2 * math.pi) / p) * .5 + c + b
},
easeinback: function (x, t, b, c, d, s) { if (s == undefined) s = 1.70158; return c * (t /= d) * t * ((s + 1) * t - s) + b },
easeoutback: function (x, t, b, c, d, s) { if (s == undefined) s = 1.70158; return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b },
easeinoutback: function (x, t, b, c, d, s) {
if (s == undefined) s = 1.70158;
if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b; return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b
},
easeinbounce: function (x, t, b, c, d) { return c - jquery.easing.easeoutbounce(x, d - t, 0, c, d) + b },
easeoutbounce: function (x, t, b, c, d) { if ((t /= d) < (1 / 2.75)) { return c * (7.5625 * t * t) + b; } else if (t < (2 / 2.75)) { return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b; } else if (t < (2.5 / 2.75)) { return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b; } else { return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b; } },
easeinoutbounce: function (x, t, b, c, d) { if (t < d / 2) return jquery.easing.easeinbounce(x, t * 2, 0, c, d) * .5 + b; return jquery.easing.easeoutbounce(x, t * 2 - d, 0, c, d) * .5 + c * .5 + b; }
});