-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.js
45 lines (37 loc) · 984 Bytes
/
main.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
import './style.css'
import Lenis from '@studio-freight/lenis'
class App {
constructor() {
this.DOM = {}
this.DOM.grid = document.querySelector('.c-grid')
if (history.scrollRestoration) {
history.scrollRestoration = 'manual'
}
this.lenis = new Lenis({
duration: 1.2,
easing: (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)),
direction: 'vertical',
gestureDirection: 'vertical',
smooth: true,
mouseMultiplier: 1,
smoothTouch: false,
touchMultiplier: 2,
infinite: false,
})
this.initRender()
this.initEvents()
}
initRender() {
requestAnimationFrame(this.update.bind(this))
}
initEvents() {
this.lenis.on('scroll', ({ scroll, limit, velocity, direction, progress }) => {
this.DOM.grid.setAttribute('style', `--progress:${progress}`)
})
}
update(time) {
this.lenis.raf(time)
requestAnimationFrame(this.update.bind(this))
}
}
new App()