88 lines
2.3 KiB
JavaScript
88 lines
2.3 KiB
JavaScript
/**
|
|
* 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 = $("<a> </a>")
|
|
.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);
|