diff options
1 files changed, 65 insertions, 0 deletions
| -rw-r--r-- | src/scripts/keyboard.js | 65 |
diff --git a/src/scripts/keyboard.js b/src/scripts/keyboard.js new file mode 100644 index 0000000..f618e45 --- /dev/null +++ b/src/scripts/keyboard.js @@ -0,0 +1,65 @@ +const headings = document.querySelectorAll('h1, h2, h3, h4, h5, h6'); +var currentHeading = 0; + +document.addEventListener('keydown', function (e) { + if (e.ctrlKey) return; + + switch (e.code) { + case 'KeyG': + currentHeading = (e.shiftKey) ? headings.length - 1 : 0; + headings[currentHeading].scrollIntoView(); + break; + + case 'KeyJ': case 'KeyL': + if (typeof presenting != 'undefined' && presenting) showSlide(+1); + else { + currentHeading = (headings.length + currentHeading + 1) % headings.length; + headings[currentHeading].scrollIntoView(); + } + break; + + case 'KeyK': case 'KeyH': + if (typeof presenting != 'undefined' && presenting) showSlide(-1); + else { + currentHeading = (headings.length + currentHeading - 1) % headings.length; + headings[currentHeading].scrollIntoView(); + } + break; + + /* theme-changer.js */ + + case 'KeyC': + themeBtn.click(); + break; + + /* presentation.js */ + + // Previous slide + case 'Backspace': case 'PageUp': + case 'ArrowLeft': case 'ArrowUp': + showSlide(-1); + break; + // Next slide + case 'Space': case 'Enter': case 'PageDown': + + case 'ArrowRight': case 'ArrowDown': + showSlide(+1); + break; + // Start (toggle) presenting + case 'KeyP': case 'KeyT': + presentBtn.click(); + break; + // Exit presentation + case 'Escape': + if (presenting) presentBtn.click(); + break; + // Go to first slide + case 'Home': + showSlide(-slideIndex); + break; + // Go to last slide + case 'End': + showSlide(-slideIndex -1); + break; + } +}); |