From a2c3475850c7564477cc10e6ffd7f857f2a0d64e Mon Sep 17 00:00:00 2001 From: Richard Bergsma Date: Thu, 6 Nov 2025 12:10:39 +0100 Subject: [PATCH] Enhance event listener management in BasicScripts component - Introduced a mechanism to store and remove event listeners, ensuring old listeners are cleared before new ones are attached. This improves performance and prevents potential memory leaks. --- src/components/common/BasicScripts.astro | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/components/common/BasicScripts.astro b/src/components/common/BasicScripts.astro index ceabf0f..bc18270 100644 --- a/src/components/common/BasicScripts.astro +++ b/src/components/common/BasicScripts.astro @@ -31,16 +31,31 @@ import { UI } from 'astrowind:config'; }; initTheme(); + // Store event listeners so they can be removed and re-attached + let eventListeners = []; + + function removeAllEventListeners() { + eventListeners.forEach(({ element, event, handler }) => { + element.removeEventListener(event, handler); + }); + eventListeners = []; + } + function attachEvent(selector, event, fn) { const matches = typeof selector === 'string' ? document.querySelectorAll(selector) : selector; if (matches && matches.length) { matches.forEach((elem) => { - elem.addEventListener(event, (e) => fn(e, elem), false); + const handler = (e) => fn(e, elem); + elem.addEventListener(event, handler, false); + eventListeners.push({ element: elem, event, handler }); }); } } const onLoad = function () { + // Remove old event listeners before attaching new ones + removeAllEventListeners(); + let lastKnownScrollPosition = window.scrollY; let ticking = false;