/** * jQuery.LocalScroll - Animated scrolling navigation, using anchors. * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com * Dual licensed under MIT and GPL. * Date: 3/11/2009 * @author Ariel Flesler * @version 1.2.7 **/ (function ($) { var l = location.href.replace(/#.*/, ""); var g = ($.localScroll = function (a) { $("body").localScroll(a); }); g.defaults = { duration: 1e3, axis: "y", event: "click", stop: true, target: window, reset: true, }; g.hash = function (a) { if (location.hash) { a = $.extend({}, g.defaults, a); a.hash = false; if (a.reset) { var e = a.duration; delete a.duration; $(a.target).scrollTo(0, a); a.duration = e; } i(0, location, a); } }; $.fn.localScroll = function (b) { b = $.extend({}, g.defaults, b); return b.lazy ? this.bind(b.event, function (a) { var e = $([a.target, a.target.parentNode]).filter(d)[0]; if (e) i(a, e, b); }) : this.find("a,area") .filter(d) .bind(b.event, function (a) { i(a, this, b); }) .end() .end(); function d() { return ( !!this.href && !!this.hash && this.href.replace(this.hash, "") == l && (!b.filter || $(this).is(b.filter)) ); } }; function i(a, e, b) { var d = e.hash.slice(1), f = document.getElementById(d) || document.getElementsByName(d)[0]; if (!f) return; if (a) a.preventDefault(); var h = $(b.target); if ( (b.lock && h.is(":animated")) || (b.onBefore && b.onBefore.call(b, a, f, h) === false) ) return; if (b.stop) h.stop(true); if (b.hash) { var j = f.id == d ? "id" : "name", k = $(" ") .attr(j, d) .css({ position: "absolute", top: $(window).scrollTop(), left: $(window).scrollLeft(), }); f[j] = ""; $("body").prepend(k); location = e.hash; k.remove(); f[j] = d; } h.scrollTo(f, b).trigger("notify.serialScroll", [f]); } })(jQuery);