diff --git a/booklore-ui/src/app/features/readers/ebook-reader/core/event.service.ts b/booklore-ui/src/app/features/readers/ebook-reader/core/event.service.ts index c238e0e27..88162b88b 100644 --- a/booklore-ui/src/app/features/readers/ebook-reader/core/event.service.ts +++ b/booklore-ui/src/app/features/readers/ebook-reader/core/event.service.ts @@ -48,6 +48,7 @@ export class ReaderEventService { private isTextSelectionInProgress = false; private touchStartTime = 0; private selectionChangeTimeout: ReturnType | null = null; + private lastTouchTime = 0; private eventSubject = new Subject(); public events$ = this.eventSubject.asObservable(); @@ -158,6 +159,11 @@ export class ReaderEventService { }); doc.addEventListener('click', (event: MouseEvent) => { + // Ignore synthesized mouse events that follow touch events + if (Date.now() - this.lastTouchTime < 500) { + return; + } + const iframe = doc.defaultView?.frameElement as HTMLIFrameElement | null; if (!iframe) return; @@ -275,6 +281,7 @@ export class ReaderEventService { private handleTouchEnd(event: TouchEvent, doc: Document): void { const touchEndTime = Date.now(); const touchDuration = touchEndTime - this.touchStartTime; + this.lastTouchTime = touchEndTime; const selection = doc.defaultView?.getSelection(); const hasSelection = selection && !selection.isCollapsed && selection.rangeCount > 0;