32 lines
1.1 KiB
JavaScript
32 lines
1.1 KiB
JavaScript
(function() {
|
|
// Handle smooth scrolling for all footnote links (both directions)
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
// Get all footnote links (both references and backlinks)
|
|
const footnoteLinks = document.querySelectorAll('a[href^="#fn:"], a[href^="#fnref:"]');
|
|
|
|
footnoteLinks.forEach(function(link) {
|
|
link.addEventListener('click', function(e) {
|
|
e.preventDefault();
|
|
|
|
const targetId = this.getAttribute('href').substring(1);
|
|
const targetElement = document.getElementById(targetId);
|
|
|
|
if (targetElement) {
|
|
// Calculate position with offset
|
|
const offset = 100; // pixels from top
|
|
const elementPosition = targetElement.getBoundingClientRect().top;
|
|
const offsetPosition = elementPosition + window.pageYOffset - offset;
|
|
|
|
// Smooth scroll to position
|
|
window.scrollTo({
|
|
top: offsetPosition,
|
|
behavior: 'smooth'
|
|
});
|
|
|
|
// Update URL hash without jumping
|
|
history.pushState(null, null, this.getAttribute('href'));
|
|
}
|
|
});
|
|
});
|
|
});
|
|
})();
|