2020-04-07 13:25:46 +02:00
|
|
|
/**
|
|
|
|
* Handles hiding of the pointer/cursor when inactive.
|
|
|
|
*/
|
|
|
|
export default class Pointer {
|
2023-05-23 19:50:14 +02:00
|
|
|
constructor(Reveal) {
|
|
|
|
this.Reveal = Reveal;
|
|
|
|
|
|
|
|
// Throttles mouse wheel navigation
|
|
|
|
this.lastMouseWheelStep = 0;
|
|
|
|
|
|
|
|
// Is the mouse pointer currently hidden from view
|
|
|
|
this.cursorHidden = false;
|
|
|
|
|
|
|
|
// Timeout used to determine when the cursor is inactive
|
|
|
|
this.cursorInactiveTimeout = 0;
|
|
|
|
|
|
|
|
this.onDocumentCursorActive = this.onDocumentCursorActive.bind(this);
|
|
|
|
this.onDocumentMouseScroll = this.onDocumentMouseScroll.bind(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Called when the reveal.js config is updated.
|
|
|
|
*/
|
|
|
|
configure(config, oldConfig) {
|
|
|
|
if (config.mouseWheel) {
|
|
|
|
document.addEventListener(
|
|
|
|
"DOMMouseScroll",
|
|
|
|
this.onDocumentMouseScroll,
|
|
|
|
false
|
|
|
|
); // FF
|
|
|
|
document.addEventListener(
|
|
|
|
"mousewheel",
|
|
|
|
this.onDocumentMouseScroll,
|
|
|
|
false
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
document.removeEventListener(
|
|
|
|
"DOMMouseScroll",
|
|
|
|
this.onDocumentMouseScroll,
|
|
|
|
false
|
|
|
|
); // FF
|
|
|
|
document.removeEventListener(
|
|
|
|
"mousewheel",
|
|
|
|
this.onDocumentMouseScroll,
|
|
|
|
false
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Auto-hide the mouse pointer when its inactive
|
|
|
|
if (config.hideInactiveCursor) {
|
|
|
|
document.addEventListener(
|
|
|
|
"mousemove",
|
|
|
|
this.onDocumentCursorActive,
|
|
|
|
false
|
|
|
|
);
|
|
|
|
document.addEventListener(
|
|
|
|
"mousedown",
|
|
|
|
this.onDocumentCursorActive,
|
|
|
|
false
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
this.showCursor();
|
|
|
|
|
|
|
|
document.removeEventListener(
|
|
|
|
"mousemove",
|
|
|
|
this.onDocumentCursorActive,
|
|
|
|
false
|
|
|
|
);
|
|
|
|
document.removeEventListener(
|
|
|
|
"mousedown",
|
|
|
|
this.onDocumentCursorActive,
|
|
|
|
false
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Shows the mouse pointer after it has been hidden with
|
|
|
|
* #hideCursor.
|
|
|
|
*/
|
|
|
|
showCursor() {
|
|
|
|
if (this.cursorHidden) {
|
|
|
|
this.cursorHidden = false;
|
|
|
|
this.Reveal.getRevealElement().style.cursor = "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hides the mouse pointer when it's on top of the .reveal
|
|
|
|
* container.
|
|
|
|
*/
|
|
|
|
hideCursor() {
|
|
|
|
if (this.cursorHidden === false) {
|
|
|
|
this.cursorHidden = true;
|
|
|
|
this.Reveal.getRevealElement().style.cursor = "none";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
destroy() {
|
|
|
|
this.showCursor();
|
|
|
|
|
|
|
|
document.removeEventListener(
|
|
|
|
"DOMMouseScroll",
|
|
|
|
this.onDocumentMouseScroll,
|
|
|
|
false
|
|
|
|
);
|
|
|
|
document.removeEventListener(
|
|
|
|
"mousewheel",
|
|
|
|
this.onDocumentMouseScroll,
|
|
|
|
false
|
|
|
|
);
|
|
|
|
document.removeEventListener(
|
|
|
|
"mousemove",
|
|
|
|
this.onDocumentCursorActive,
|
|
|
|
false
|
|
|
|
);
|
|
|
|
document.removeEventListener(
|
|
|
|
"mousedown",
|
|
|
|
this.onDocumentCursorActive,
|
|
|
|
false
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Called whenever there is mouse input at the document level
|
|
|
|
* to determine if the cursor is active or not.
|
|
|
|
*
|
|
|
|
* @param {object} event
|
|
|
|
*/
|
|
|
|
onDocumentCursorActive(event) {
|
|
|
|
this.showCursor();
|
|
|
|
|
|
|
|
clearTimeout(this.cursorInactiveTimeout);
|
|
|
|
|
|
|
|
this.cursorInactiveTimeout = setTimeout(
|
|
|
|
this.hideCursor.bind(this),
|
|
|
|
this.Reveal.getConfig().hideCursorTime
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Handles mouse wheel scrolling, throttled to avoid skipping
|
|
|
|
* multiple slides.
|
|
|
|
*
|
|
|
|
* @param {object} event
|
|
|
|
*/
|
|
|
|
onDocumentMouseScroll(event) {
|
|
|
|
if (Date.now() - this.lastMouseWheelStep > 1000) {
|
|
|
|
this.lastMouseWheelStep = Date.now();
|
|
|
|
|
|
|
|
let delta = event.detail || -event.wheelDelta;
|
|
|
|
if (delta > 0) {
|
|
|
|
this.Reveal.next();
|
|
|
|
} else if (delta < 0) {
|
|
|
|
this.Reveal.prev();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|