diff --git a/src/events/components/events.ts b/src/events/components/events.ts index a4a794e1a486..eea4450ee1f4 100644 --- a/src/events/components/events.ts +++ b/src/events/components/events.ts @@ -305,6 +305,7 @@ function initLinkEvent() { } function initHoverEvent() { + let timer: number | null = null document.documentElement.addEventListener('mouseover', (evt) => { const target = evt.target as HTMLElement const link = target.closest('a[href]') as HTMLAnchorElement | null @@ -317,13 +318,27 @@ function initHoverEvent() { if (!mainContent || !mainContent.contains(link)) return if (hoveredUrls.has(link.href)) return // Otherwise this is a flood of events - const sameSite = link.origin === location.origin - hoveredUrls.add(link.href) - sendEvent({ - type: EventType.hover, - hover_url: link.href, - hover_samesite: sameSite, - }) + + if (timer) { + window.clearTimeout(timer) + } + timer = window.setTimeout(() => { + const sameSite = link.origin === location.origin + hoveredUrls.add(link.href) + sendEvent({ + type: EventType.hover, + hover_url: link.href, + hover_samesite: sameSite, + }) + }, 500) + }) + + // Doesn't matter which link you hovered on that triggered a timer, + // you're clearly not hovering over it any more. + document.documentElement.addEventListener('mouseout', () => { + if (timer) { + window.clearTimeout(timer) + } }) }