const { animate, utils, stagger, splitText } = anime;
document.addEventListener('DOMContentLoaded', function () {
const colors = [];
new Glide('.glide', {
type: 'carousel',
autoplay: 2000,
startAt: 0,
perView: 2.5,
gap: 32,
breakpoints: {
1024: {
perView: 2
},
768: {
perView: 1
}
}
}).mount();
// Initialize Atropos 3D Effect
const dash = Atropos({
el: '.my-atropos',
activeOffset: 40,
shadow: true,
shadowScale: 1.05,
onEnter() {
console.log('Atropos Enter');
},
onLeave() {
console.log('Atropos Leave');
},
onRotate(x, y) {
// Optional: add some dynamic lighting update logic here
}
});
// Anime js text bullshit
splitText('.animated-text', {
lines: true,
})
.addEffect(({ lines }) => animate(lines, {
y: ['20%', '-20%'],
loop: true,
alternate: true,
delay: stagger(15000),
ease: 'inOutQuad',
}))
.addEffect(split => {
split.words.forEach(($el, i) => {
const color = colors[i];
if (color) utils.set($el, { color });
$el.addEventListener('pointerenter', () => {
animate($el, {
color: utils.randomPick(['#FF4B4B', '#FFCC2A', '#B7FF54', '#57F695']),
duration: 250,
})
});
});
return () => {
/* Called between each split */
split.words.forEach((w, i) => colors[i] = utils.get(w, 'color'));
}
});
// Anime JS morph bullshit
});