feat(smoothScroll): add util to smoothly scroll to the id after anchor click

This commit is contained in:
Ilia Mashkov
2026-02-10 21:15:39 +03:00
parent 223dff2cda
commit f01299f3d1

View File

@@ -0,0 +1,32 @@
/**
* Smoothly scrolls to the target element when an anchor element is clicked.
* @param node - The anchor element to listen for clicks on.
*/
export function smoothScroll(node: HTMLAnchorElement) {
const handleClick = (event: MouseEvent) => {
event.preventDefault();
const hash = node.getAttribute('href');
if (!hash || hash === '#') return;
const targetElement = document.querySelector(hash);
if (targetElement) {
targetElement.scrollIntoView({
behavior: 'smooth',
block: 'start',
});
// Update URL hash without jumping
history.pushState(null, '', hash);
}
};
node.addEventListener('click', handleClick);
return {
destroy() {
node.removeEventListener('click', handleClick);
},
};
}