Implement #2: simulate hover event

This commit is contained in:
Yanzhen Yu
2026-04-01 12:00:00 +08:00
parent 4e0c401583
commit 7a57784daf
4 changed files with 22 additions and 3 deletions

View File

@@ -31,11 +31,11 @@ export class Replayer {
private iframe: HTMLIFrameElement;
private mouse: HTMLDivElement;
private baselineTime: number = 0;
private timerIds: number[] = [];
private emitter: mitt.Emitter = mitt();
private baselineTime: number = 0;
// record last played event timestamp when paused
private lastPlayedEvent: eventWithTime;
@@ -260,6 +260,10 @@ export class Replayer {
this.later(() => {
this.mouse.style.left = `${p.x}px`;
this.mouse.style.top = `${p.y}px`;
const target = mirror.getNode(p.id);
if (target) {
this.hoverElements((target as Node) as Element);
}
}, p.timeOffset);
});
}
@@ -308,4 +312,17 @@ export class Replayer {
default:
}
}
private hoverElements(el: Element) {
this.iframe
.contentDocument!.querySelectorAll('.\\:hover')
.forEach(hoveredEl => {
hoveredEl.classList.remove(':hover');
});
let currentEl: Element | null = el;
while (currentEl) {
currentEl.classList.add(':hover');
currentEl = currentEl.parentElement;
}
}
}