/*! * 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;} });