-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
50 lines (41 loc) · 1.66 KB
/
Copy pathscript.js
File metadata and controls
50 lines (41 loc) · 1.66 KB
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
document.getElementById('btn-light').addEventListener('click', () => {
document.documentElement.removeAttribute('data-theme');
});
document.getElementById('btn-dark').addEventListener('click', () => {
document.documentElement.setAttribute('data-theme', 'dark');
});
gsap.registerPlugin(ScrollTrigger);
const lenis = new Lenis({ autoRaf: true });
lenis.on('scroll', ScrollTrigger.update);
const proxy = { skew: 0 };
const skewSetter = gsap.quickSetter('.cover', 'skewY', 'deg');
const clamp = gsap.utils.clamp(-5, 5);
ScrollTrigger.create({
onUpdate(self) {
const skew = clamp(self.getVelocity() / -500);
if (Math.abs(skew) > Math.abs(proxy.skew)) {
proxy.skew = skew;
gsap.to(proxy, {
skew: 0,
duration: 0.8,
ease: 'power3',
overwrite: true,
onUpdate: () => skewSetter(proxy.skew)
});
}
}
});
gsap.set('.cover', { transformOrigin: 'right center', force3D: true });
document.querySelectorAll('.cover').forEach(cover => {
const img = cover.querySelector('img');
const caption = cover.querySelector('figcaption');
gsap.set(caption, { y: 8 });
cover.addEventListener('mouseenter', () => {
gsap.to(img, { scale: 1.05, filter: 'brightness(0.2)', duration: 0.4, ease: 'power2.out' });
gsap.to(caption, { opacity: 1, y: 0, duration: 0.4, ease: 'power2.out' });
});
cover.addEventListener('mouseleave', () => {
gsap.to(img, { scale: 1, filter: 'brightness(1)', duration: 0.4, ease: 'power2.out' });
gsap.to(caption, { opacity: 0, y: 8, duration: 0.3, ease: 'power2.in' });
});
});