88 lines
2.7 KiB
JavaScript
88 lines
2.7 KiB
JavaScript
$(document).ready(function () {
|
|
var AFFIX_TOP_LIMIT = 300;
|
|
var AFFIX_OFFSET = 49;
|
|
|
|
var $menu = $("#menu"),
|
|
$btn = $("#menu-toggle");
|
|
|
|
$("#menu-toggle").on("click", function () {
|
|
$menu.toggleClass("open");
|
|
return false;
|
|
});
|
|
|
|
$(".docs-nav li a").on('click', function (e) {
|
|
e.preventDefault();
|
|
var anchor = $(this).attr('href');
|
|
$('html, body').animate({
|
|
scrollTop: jQuery(anchor).offset().top
|
|
}, 1000);
|
|
});
|
|
|
|
$(".docs-nav").each(function () {
|
|
var $affixNav = $(this),
|
|
$container = $affixNav.parent(),
|
|
affixNavfixed = false,
|
|
originalClassName = this.className,
|
|
current = null,
|
|
$links = $affixNav.find("a");
|
|
|
|
function getClosestHeader(top) {
|
|
var last = $links.first();
|
|
|
|
if (top < AFFIX_TOP_LIMIT) {
|
|
return last;
|
|
}
|
|
|
|
for (var i = 0; i < $links.length; i++) {
|
|
var $link = $links.eq(i),
|
|
href = $link.attr("href");
|
|
|
|
if (href.charAt(0) === "#" && href.length > 1) {
|
|
var $anchor = $(href).first();
|
|
|
|
if ($anchor.length > 0) {
|
|
var offset = $anchor.offset();
|
|
|
|
if (top < offset.top - AFFIX_OFFSET) {
|
|
return last;
|
|
}
|
|
|
|
last = $link;
|
|
}
|
|
}
|
|
}
|
|
return last;
|
|
}
|
|
|
|
$(window).on("scroll", function (evt) {
|
|
var top = window.scrollY,
|
|
height = $affixNav.outerHeight(),
|
|
max_bottom = $container.offset().top + $container.outerHeight(),
|
|
bottom = top + height + AFFIX_OFFSET;
|
|
|
|
if (affixNavfixed) {
|
|
if (top <= AFFIX_TOP_LIMIT) {
|
|
$affixNav.removeClass("fixed");
|
|
$affixNav.css("top", 0);
|
|
affixNavfixed = false;
|
|
} else if (bottom > max_bottom) {
|
|
$affixNav.css("top", (max_bottom - height) - top);
|
|
} else {
|
|
$affixNav.css("top", AFFIX_OFFSET);
|
|
}
|
|
} else if (top > AFFIX_TOP_LIMIT) {
|
|
$affixNav.addClass("fixed");
|
|
affixNavfixed = true;
|
|
}
|
|
|
|
var $current = getClosestHeader(top);
|
|
|
|
if (current !== $current) {
|
|
$affixNav.find(".active").removeClass("active");
|
|
$current.addClass("active");
|
|
current = $current;
|
|
}
|
|
});
|
|
});
|
|
});
|