/*!
* superslide v2.0
* 轻松解决网站大部分特效展示问题
* 详尽信息请看官网:http://www.superslide2.com/
*
* copyright 2011-2013, 大话主席
*
* 请尊重原创,保留头部版权
* 在保留版权的前提下可应用于个人或商业用途
*/
(function ($) {
$.fn.slide = function (options) {
$.fn.slide.defaults = {
effect: "fade",
autoplay: false,
delaytime: 500,
intertime: 2500,
triggertime: 150,
defaultindex: 0,
titcell: ".menu li",
maincell: ".bd",
targetcell: null,
trigger: "mouseover",
scroll: 1,
vis: 1,
titonclassname: "active",
autopage: false,
prevcell: ".prev",
nextcell: ".next",
pagestatecell: ".pagestate",
opp: false,
pnloop: true,
easing: "linear",
startfun: null,
endfun: null,
switchload: null
};
return this.each(function () {
var opts = $.extend({}, $.fn.slide.defaults, options);
var effect = opts.effect;
var prevbtn = $(opts.prevcell, $(this));
var nextbtn = $(opts.nextcell, $(this));
var pagestate = $(opts.pagestatecell, $(this));
var navobj = $(opts.titcell, $(this)); //导航子元素结合
var navobjsize = navobj.size();
var conbox = $(opts.maincell, $(this)); //内容元素父层对象
var conboxsize = conbox.children().size();
var sload = opts.switchload;
if (opts.targetcell != null) { var tarobj = $(opts.targetcell, $(this)) };
/*字符串转换为数字*/
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 loop = (opts.pnloop == "false" || opts.pnloop == false) ? false : true;
var slideh = 0;
var slidew = 0;
var selfw = 0;
var selfh = 0;
var easing = opts.easing;
var inter = null; //setinterval名称
var oldindex = index;
//处理分页
if (navobjsize == 0) navobjsize = conboxsize;
if (autopage) {
var temps = conboxsize - vis;
navobjsize = 1 + parseint(temps % scroll != 0 ? (temps / scroll + 1) : (temps / scroll));
if (navobjsize <= 0) navobjsize = 1;
navobj.html("");
for (var i = 0; i < navobjsize; i++) { navobj.append("
" + (i + 1) + "") }
var navobj = $("li", navobj); //重置导航子元素对象
}
conbox.children().each(function () { //取最大值
if ($(this).width() > selfw) { selfw = $(this).width(); slidew = $(this).outerwidth(true); }
// alert(selfw);
// alert(slidew);
if ($(this).height() > selfh) { selfh = $(this).height(); slideh = $(this).outerheight(true); }
});
if (conboxsize >= vis) { //当内容个数少于可视个数,不执行效果。
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({ "position": "relative", "padding": "0", "margin": "0" }).children().css({ "height": selfh }); break;
case "left": conbox.wrap('').css({ "width": conboxsize * slidew, "position": "relative", "overflow": "hidden", "padding": "0", "margin": "0" }).children().css({ "float": "left" }); break;
case "leftloop":
case "leftmarquee":
conbox.children().clone().appendto(conbox).clone().prependto(conbox);
conbox.wrap('').css({ "width": conboxsize * slidew * 3, "position": "relative", "overflow": "hidden", "padding": "0", "margin": "0", "left": -conboxsize * slidew }).children().css({ "float": "left", "width": selfw }); break;
case "toploop":
case "topmarquee":
conbox.children().clone().appendto(conbox).clone().prependto(conbox);
conbox.wrap('').css({ "height": conboxsize * slideh * 3, "position": "relative", "padding": "0", "margin": "0", "top": -conboxsize * slideh }).children().css({ "height": selfh }); break;
}
}
var dostartfun = function () { if ($.isfunction(opts.startfun)) { opts.startfun(index, navobjsize); } };
var doendfun = function () { if ($.isfunction(opts.endfun)) { opts.endfun(index, navobjsize); } };
var doswitchload = function (objs) {
objs.eq(index).find("img").each(function () {
if (typeof ($(this).attr(sload)) != "undefined") { $(this).attr("src", $(this).attr(sload)).removeattr(sload) }
})
}
//效果函数
var doplay = function (isfirst) {
if (oldindex == index && !isfirst && effect != "leftmarquee" && effect != "topmarquee") return; // 当前页状态不触发效果
switch (effect) {
case "fade": case "fold": case "top": case "left": if (index >= navobjsize) { index = 0; } else if (index < 0) { index = navobjsize - 1; } break;
case "leftmarquee": case "topmarquee": if (index >= 1) { index = 1; } else if (index <= 0) { index = 0; } break;
case "leftloop": case "toploop":
var tempnum = index - oldindex;
if (navobjsize > 2 && tempnum == -(navobjsize - 1)) tempnum = 1;
if (navobjsize > 2 && tempnum == (navobjsize - 1)) tempnum = -1;
var scrollnum = math.abs(tempnum * scroll);
if (index >= navobjsize) { index = 0; } else if (index < 0) { index = navobjsize - 1; }
break;
}
dostartfun();
//处理切换加载
if (sload != null) { doswitchload(conbox.children()) }
//处理targetcell
if (tarobj) {
if (sload != null) { doswitchload(tarobj) }
tarobj.hide().eq(index).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":
if (tempnum < 0) {
conbox.stop(true, true).animate({ "left": -(conboxsize - scrollnum) * slidew }, delaytime, easing, function () {
for (var i = 0; i < scrollnum; i++) { conbox.children().last().prependto(conbox); }
conbox.css("left", -conboxsize * slidew);
doendfun();
});
}
else {
conbox.stop(true, true).animate({ "left": -(conboxsize + scrollnum) * slidew }, delaytime, easing, function () {
for (var i = 0; i < scrollnum; i++) { conbox.children().first().appendto(conbox); }
conbox.css("left", -conboxsize * slidew);
doendfun();
});
} break; // leftloop end
case "toploop":
if (tempnum < 0) {
conbox.stop(true, true).animate({ "top": -(conboxsize - scrollnum) * slideh }, delaytime, easing, function () {
for (var i = 0; i < scrollnum; i++) { conbox.children().last().prependto(conbox); }
conbox.css("top", -conboxsize * slideh);
doendfun();
});
}
else {
conbox.stop(true, true).animate({ "top": -(conboxsize + scrollnum) * slideh }, delaytime, easing, function () {
for (var i = 0; i < scrollnum; i++) { conbox.children().first().appendto(conbox); }
conbox.css("top", -conboxsize * 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) { for (var i = 0; i < conboxsize; i++) { conbox.children().last().prependto(conbox); } conbox.css("left", -conboxsize * slidew); }
});
}
else {
conbox.animate({ "left": --templeft }, 0, function () {
if (conbox.css("left").replace("px", "") <= -conboxsize * slidew * 2) { for (var i = 0; i < conboxsize; i++) { conbox.children().first().appendto(conbox); } conbox.css("left", -conboxsize * 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) { for (var i = 0; i < conboxsize; i++) { conbox.children().last().prependto(conbox); } conbox.css("top", -conboxsize * slideh); }
});
}
else {
conbox.animate({ "top": --temptop }, 0, function () {
if (conbox.css("top").replace("px", "") <= -conboxsize * slideh * 2) { for (var i = 0; i < conboxsize; i++) { conbox.children().first().appendto(conbox); } conbox.css("top", -conboxsize * slideh); }
});
} break; // topmarquee end
} //switch end
}
navobj.removeclass(opts.titonclassname).eq(index).addclass(opts.titonclassname);
oldindex = index;
if (loop == false) { //loop控制是否继续循环
nextbtn.removeclass("nextstop"); prevbtn.removeclass("prevstop");
if (index == 0) { prevbtn.addclass("prevstop"); }
else if (index == navobjsize - 1) { nextbtn.addclass("nextstop"); }
}
pagestate.html("" + (index + 1) + "/" + navobjsize);
};
//初始化执行
doplay(true);
//自动播放
if (autoplay) {
if (effect == "leftmarquee" || effect == "topmarquee") {
if (opp) { index-- } else { index++ } inter = setinterval(doplay, intertime);
conbox.hover(function () { if (autoplay) { clearinterval(inter); } }, function () { if (autoplay) { clearinterval(inter); inter = setinterval(doplay, intertime); } });
} else {
inter = setinterval(function () { if (opp) { index-- } else { index++ }; doplay() }, intertime);
$(this).hover(function () { if (autoplay) { clearinterval(inter); } }, function () { if (autoplay) { clearinterval(inter); inter = setinterval(function () { if (opp) { index-- } else { index++ }; doplay() }, intertime); } });
}
}
//鼠标事件
var mst;
if (opts.trigger == "mouseover") {
navobj.hover(function () { index = navobj.index(this); mst = window.settimeout(doplay, opts.triggertime); }, function () { cleartimeout(mst); });
} else { navobj.click(function () { index = navobj.index(this); doplay(); }) }
nextbtn.click(function () { if (loop == true || index != navobjsize - 1) { index++; doplay(); } });
prevbtn.click(function () { if (loop == true || index != 0) { index--; doplay(); } });
}); //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;}
});