www.gusucode.com > 200套html5精品模板151_200 > 200套html5精品模板151_200/194/js/jquery.visualNav.min.js
/* * Visual Navigation (visualNav) v2.2 minified * https://github.com/Mottie/visualNav/wiki * * Copyright (c) 2011 Rob Garrison (aka Mottie & Fudgey) * Dual licensed under the MIT and GPL licenses. * */ (function (b) { b.visualNav = function (d, f) { var a = this; a.$el = b(d); a.$el.data("visualNav", a); a.win = window; a.$win = b(a.win); a.$doc = b(document); var h = "html, body"; b("html, body").each(function () { var a = b(this).attr("scrollTop"); b(this).attr("scrollTop", a + 1); if (b(this).attr("scrollTop") === a + 1) return h = this.nodeName.toLowerCase(), b(this).attr("scrollTop", a), !1 }); a.$body = b(h); a.init = function () { a.options = b.extend({}, b.visualNav.defaultOptions, f); a.content = b("." + a.options.contentClass); a.leftMargin = parseInt(a.content.css("margin-left"), 10); a.rightMargin = parseInt(a.content.css("margin-right"), 10); if (!b.isFunction(b.easing[a.options.easing[0]])) a.options.easing = ["swing", "swing"]; a.$body.bind("scroll mousedown DOMMouseScroll mousewheel keyup", function (b) { (b.which > 0 || b.type === "mousedown" || b.type === "mousewheel") && a.$body.stop() }); a.$el.find(a.options.selectedAppliedTo + (a.options.selectedAppliedTo === a.options.link ? "" : " " + a.options.link)).add(b("." + a.options.contentLinks)).click(function () { var c = this.tagName === "A" ? "href" : a.options.targetAttr; a.animate(b(this).attr(c)); return !1 }); a.$win.scroll(function () { a.findLocation() }).resize(function () { a.findLocation() }) }; a.animate = function (c) { if (c !== "#" && b(c).length) { var e = b(c).eq(0).closest("." + a.options.contentClass); a.$body.stop().animate({ scrollLeft: Math.min(e.offset().left, a.$doc.width() - a.$win.width()) - a.leftMargin, scrollTop: Math.min(e.offset().top, a.$doc.height() - a.$win.height()) }, { queue: !1, duration: a.options.animationTime, specialEasing: { scrollLeft: a.options.easing[0] || "swing", scrollTop: a.options.easing[1] || a.options.easing[0] || "swing" }, complete: function () { if (a.options.useHash) a.win.location.hash = e[0].id } }) } }; a.findLocation = function () { var c, e, d, g, f, j, k, h, i = a.$win.width(), n = a.$win.scrollLeft(), o = a.$win.scrollTop(), p = n + i, l = o + a.$win.height(), q = a.$doc.height(), m = a.$el.find(a.options.selectedAppliedTo).removeClass(a.options.inViewClass); a.options.fitContent && a.content.width(i - a.leftMargin - a.rightMargin); a.$el.find(a.options.link).each(function (i) { g = b(this).attr(a.options.targetAttr); c = g === "#" || g.length <= 1 ? "" : b(g); c.length && (d = Math.ceil(c.offset().top), e = Math.ceil(c.offset().left), j = c.outerHeight(), f = d + j + a.options.bottomMargin, k = c.outerWidth(), h = e + k, d < l && (d + j - a.options.bottomMargin > o || f > l) && e < p && (e + k - a.options.bottomMargin > n || h > p) && m.eq(i).addClass(a.options.inViewClass)) }); g = l + a.options.bottomMargin >= q ? ":last" : ":first"; m.removeClass(a.options.selectedClass); m.filter("." + a.options.inViewClass + g).addClass(a.options.selectedClass) }; a.init(); a.options.useHash && a.win.location.hash && setTimeout(function () { a.animate(a.win.location.hash) }, a.options.animationTime / 2); a.findLocation() }; b.visualNav.defaultOptions = { link: "a", targetAttr: "href", selectedAppliedTo: "li", contentClass: "content", contentLinks: "visualNav", useHash: !0, inViewClass: "inView", selectedClass: "selected", bottomMargin: 100, fitContent: !1, animationTime: 1200, easing: ["swing", "swing"] }; b.fn.visualNav = function (d) { return this.each(function () { var f = b(this).data("visualNav"); typeof d === "string" && /^(#|\.)/.test(d) && f.animate(d); f || new b.visualNav(this, d) }) }; b.fn.getvisualNav = function () { return this.data("visualNav") } })(jQuery);