Skip to content

Commit

Permalink
Add hide mouse class to the container if inactive (#153)
Browse files Browse the repository at this point in the history
* Add hide mouse class to the container if inactive

* Update class name

* Properly attach an event

* Remove mousemove event listener after exiting full mode

Co-authored-by: Vadim Makeev <[email protected]>
  • Loading branch information
nanot1m and Vadim Makeev authored Oct 16, 2021
1 parent 6d2a7fb commit 21199ec
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 0 deletions.
2 changes: 2 additions & 0 deletions lib/default-options.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ export default {
stepSelector: '.next',
fullModeClass: 'full',
listModeClass: 'list',
mouseHiddenClass: 'pointless',
mouseInactivityTimeout: 5000,

slideSelector: '.slide',
slideTitleSelector: 'h2',
Expand Down
2 changes: 2 additions & 0 deletions lib/modules/install.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import timer from './timer';
import title from './title';
import view from './view';
import touch from './touch';
import mouse from './mouse';

export default (shower) => {
a11y(shower);
Expand All @@ -18,6 +19,7 @@ export default (shower) => {
location(shower); // should come after `title`
view(shower);
touch(shower);
mouse(shower);

// maintains invariant: active slide always exists in `full` mode
if (shower.isFullMode && !shower.activeSlide) {
Expand Down
41 changes: 41 additions & 0 deletions lib/modules/mouse.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
export default (shower) => {
const { mouseHiddenClass, mouseInactivityTimeout } = shower.options;

let hideMouseTimeoutId = null;

const cleanUp = () => {
shower.container.classList.remove(mouseHiddenClass);
clearTimeout(hideMouseTimeoutId);
hideMouseTimeoutId = null;
};

const hideMouseIfInactive = () => {
if (hideMouseTimeoutId !== null) {
cleanUp();
}

hideMouseTimeoutId = setTimeout(() => {
shower.container.classList.add(mouseHiddenClass);
}, mouseInactivityTimeout);
};

const initHideMouseIfInactiveModule = () => {
shower.container.addEventListener('mousemove', hideMouseIfInactive);
};

const destroyHideMouseIfInactiveModule = () => {
shower.container.removeEventListener('mousemove', hideMouseIfInactive);
cleanUp();
};

const handleModeChange = () => {
if (shower.isFullMode) {
initHideMouseIfInactiveModule();
} else {
destroyHideMouseIfInactiveModule();
}
};

shower.addEventListener('start', handleModeChange);
shower.addEventListener('modechange', handleModeChange);
};

0 comments on commit 21199ec

Please sign in to comment.