blob: c530685415f8d146de85061375a4f4849e3288cf [file] [log] [blame]
jQuery(document).ready(function($) {
getNavbarOffset = function() {
return $("#banner").height();
};
$("#navbar").affix({
offset: { top: getNavbarOffset }
});
$(window).resize(function() {
$("#navbar").affix("checkPosition");
});
});
// Fix anchor links in light of fixed navbar
// http://jsfiddle.net/ianclark001/rkocah23/
(function(document, history, location) {
var HISTORY_SUPPORT = !!(history && history.pushState);
var anchorScrolls = {
ANCHOR_REGEX: /^#[^ ]+$/,
OFFSET_HEIGHT_PX: 60,
/**
* Establish events, and fix initial scroll position if a hash is provided.
*/
init: function() {
this.scrollToCurrent();
$(window).on("hashchange", $.proxy(this, "scrollToCurrent"));
$("body").on("click", "a", $.proxy(this, "delegateAnchors"));
},
/**
* Return the offset amount to deduct from the normal scroll position.
* Modify as appropriate to allow for dynamic calculations
*/
getFixedOffset: function() {
return this.OFFSET_HEIGHT_PX;
},
/**
* If the provided href is an anchor which resolves to an element on the
* page, scroll to it.
* @param {String} href
* @return {Boolean} - Was the href an anchor.
*/
scrollIfAnchor: function(href, pushToHistory) {
var match, anchorOffset;
if (!this.ANCHOR_REGEX.test(href)) {
return false;
}
match = document.getElementById(href.slice(1));
if (match) {
anchorOffset = $(match).offset().top - this.getFixedOffset();
$("html, body").animate({ scrollTop: anchorOffset });
// Add the state to history as-per normal anchor links
if (HISTORY_SUPPORT && pushToHistory) {
history.pushState({}, document.title, location.pathname + href);
}
}
return !!match;
},
/**
* Attempt to scroll to the current location's hash.
*/
scrollToCurrent: function(e) {
if (this.scrollIfAnchor(window.location.hash) && e) {
e.preventDefault();
}
},
/**
* If the click event's target was an anchor, fix the scroll position.
*/
delegateAnchors: function(e) {
var elem = e.target;
if (this.scrollIfAnchor(elem.getAttribute("href"), true)) {
e.preventDefault();
}
}
};
$(document).ready($.proxy(anchorScrolls, "init"));
})(window.document, window.history, window.location);