You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.2 KiB
JavaScript
43 lines
1.2 KiB
JavaScript
7 years ago
|
(function() {
|
||
|
var pending = false, prevVal = null;
|
||
|
|
||
|
function updateSoon() {
|
||
|
if (!pending) {
|
||
|
pending = true;
|
||
|
setTimeout(update, 250);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function update() {
|
||
|
pending = false;
|
||
|
var marks = document.getElementById("nav").getElementsByTagName("a"), found;
|
||
|
for (var i = 0; i < marks.length; ++i) {
|
||
|
var mark = marks[i], m;
|
||
|
if (mark.getAttribute("data-default")) {
|
||
|
if (found == null) found = i;
|
||
|
} else if (m = mark.href.match(/#(.*)/)) {
|
||
|
var ref = document.getElementById(m[1]);
|
||
|
if (ref && ref.getBoundingClientRect().top < 50)
|
||
|
found = i;
|
||
|
}
|
||
|
}
|
||
|
if (found != null && found != prevVal) {
|
||
|
prevVal = found;
|
||
|
var lis = document.getElementById("nav").getElementsByTagName("li");
|
||
|
for (var i = 0; i < lis.length; ++i) lis[i].className = "";
|
||
|
for (var i = 0; i < marks.length; ++i) {
|
||
|
if (found == i) {
|
||
|
marks[i].className = "active";
|
||
|
for (var n = marks[i]; n; n = n.parentNode)
|
||
|
if (n.nodeName == "LI") n.className = "active";
|
||
|
} else {
|
||
|
marks[i].className = "";
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
window.addEventListener("scroll", updateSoon);
|
||
|
window.addEventListener("load", updateSoon);
|
||
|
})();
|