openreplay/frontend/app/player/MessageDistributor/managers/MouseManager.js
2021-05-01 15:12:01 +05:30

43 lines
No EOL
1.1 KiB
JavaScript

//@flow
import type StatedScreen from '../StatedScreen';
import type { MouseMove } from '../messages';
import type { Timed } from '../Timed';
import ListWalker from './ListWalker';
type MouseMoveTimed = MouseMove & Timed;
const HOVER_CLASS = "-openreplay-hover";
export default class MouseManager extends ListWalker<MouseMoveTimed> {
#screen: StatedScreen;
#hoverElements: Array<Element> = [];
constructor(screen: StatedScreen): void {
super();
this.#screen = screen;
}
_updateHover(): void {
const curHoverElements = this.#screen.cursor.getTargets();
const diffAdd = curHoverElements.filter(elem => !this.#hoverElements.includes(elem));
const diffRemove = this.#hoverElements.filter(elem => !curHoverElements.includes(elem));
this.#hoverElements = curHoverElements;
diffAdd.forEach(elem => elem.classList.add(HOVER_CLASS));
diffRemove.forEach(elem => elem.classList.remove(HOVER_CLASS));
}
reset(): void {
this.#hoverElements = [];
}
move(t: number) {
const lastMouseMove = this.moveToLast(t);
if (!!lastMouseMove){
this.#screen.cursor.move(lastMouseMove);
this._updateHover();
}
}
}