24 lines
851 B
JavaScript
24 lines
851 B
JavaScript
(function () {
|
|
var headings = document.querySelectorAll('.post-content h2, .post-content h3');
|
|
var links = document.querySelectorAll('.toc-list a');
|
|
if (!headings.length || !links.length) return;
|
|
|
|
var map = {};
|
|
links.forEach(function (a) {
|
|
map[decodeURIComponent(a.getAttribute('href').slice(1))] = a;
|
|
});
|
|
|
|
var active = null;
|
|
var observer = new IntersectionObserver(function (entries) {
|
|
entries.forEach(function (entry) {
|
|
if (entry.isIntersecting) {
|
|
if (active) active.classList.remove('toc-active');
|
|
active = map[entry.target.id] || null;
|
|
if (active) active.classList.add('toc-active');
|
|
}
|
|
});
|
|
}, { rootMargin: '-8% 0px -82% 0px', threshold: 0 });
|
|
|
|
headings.forEach(function (h) { observer.observe(h); });
|
|
})();
|