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);