-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
67 lines (55 loc) · 1.09 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
class Slide {
constructor () {
this.sections = document.querySelectorAll('section')
this.last = this.sections.length - 1
this.current = 0
this.target = null
this.onKeyDown()
}
onKeyDown() {
document.addEventListener('keydown', (event) => {
if (
event.code === 'ArrowLeft' ||
event.code === 'ArrowUp'
) {
event.preventDefault();
this.#goToPreviousSlide()
}
if (
event.code === 'ArrowRight' ||
event.code === 'ArrowDown' ||
event.code === 'Space'
) {
event.preventDefault();
this.#goToNextSlide()
}
if (event.code.includes('Digit')) {
event.preventDefault();
this.#goToSlide(event.key)
}
})
}
#goToPreviousSlide() {
if (this.current > 0) {
this.current--;
}
this.#scroll()
}
#goToNextSlide() {
if (this.current < this.last) {
this.current++;
}
this.#scroll()
}
#goToSlide(key) {
this.current = key - 1
this.#scroll()
}
#scroll() {
this.target = this.sections[this.current];
if (this.target) {
this.target.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
}
}
new Slide()