diff --git a/src/modules/webslides.js b/src/modules/webslides.js index 028b946..4e31f55 100644 --- a/src/modules/webslides.js +++ b/src/modules/webslides.js @@ -1,4 +1,4 @@ -import Plugins from './plugins'; +import Plugins from '../plugins/plugins'; import Slide from './slide'; import DOM from '../utils/dom'; import ScrollHelper from '../utils/scroll-to'; @@ -9,7 +9,8 @@ const CLASSES = { const PLUGINS = { 'nav': Plugins.Navigation, - 'hash': Plugins.Hash + 'hash': Plugins.Hash, + 'keyboard': Plugins.Keyboard }; export default class WebSlides { diff --git a/src/modules/hash.js b/src/plugins/hash.js similarity index 100% rename from src/modules/hash.js rename to src/plugins/hash.js diff --git a/src/plugins/keyboard.js b/src/plugins/keyboard.js new file mode 100644 index 0000000..d231e33 --- /dev/null +++ b/src/plugins/keyboard.js @@ -0,0 +1,42 @@ +import Keys from '../utils/keys'; + +export default class Keyboard { + /** + * @param {WebSlides} wsInstance The WebSlides instance + */ + constructor(wsInstance) { + /** + * @type {WebSlides} + * @private + */ + this.ws_ = wsInstance; + + document.addEventListener("keydown", this.onKeyPress_.bind(this), false); + } + + onKeyPress_(event) { + let method; + + if (event.which === Keys.SPACE) { + method = this.ws_.goNext; + } else { + if (this.ws_.isVertical) { + if (event.which === Keys.DOWN) { + method = this.ws_.goNext; + } else if (event.which === Keys.UP) { + method = this.ws_.goPrev; + } + } else { + if (event.which === Keys.RIGHT) { + method = this.ws_.goNext; + } else if (event.which === Keys.LEFT) { + method = this.ws_.goPrev; + } + } + } + + if (method) { + method.call(this.ws_); + } + } +} diff --git a/src/modules/navigation.js b/src/plugins/navigation.js similarity index 100% rename from src/modules/navigation.js rename to src/plugins/navigation.js diff --git a/src/modules/plugins.js b/src/plugins/plugins.js similarity index 65% rename from src/modules/plugins.js rename to src/plugins/plugins.js index 29ce5ef..3bdb403 100644 --- a/src/modules/plugins.js +++ b/src/plugins/plugins.js @@ -1,7 +1,9 @@ import Navigation from './navigation'; import Hash from './hash'; +import Keyboard from './keyboard'; export default { Navigation, - Hash + Hash, + Keyboard }; diff --git a/src/utils/keys.js b/src/utils/keys.js new file mode 100644 index 0000000..02c5a4a --- /dev/null +++ b/src/utils/keys.js @@ -0,0 +1,10 @@ +const Keys = { + ENTER: 13, + SPACE: 32, + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40 +}; + +export default Keys;