fix(gallery): disable animation after resizing to avoid duplicate animation

This commit is contained in:
2026-01-02 14:14:15 +01:00
parent e2c7102ce3
commit 377e5298b1

View File

@@ -2,8 +2,13 @@
import { LazyGalleryModal } from "#components";
import type { InternalApi } from "nitropack/types";
// TODO: only play intro anim ONCE
// currently, if lane count changes, the animation is being replayed and it's shit
const images = ref<InternalApi["/api/gallery"]["get"]>([]);
const resized = ref(false);
const scrollArea = ref();
const overlay = useOverlay();
const galleryModal = overlay.create(LazyGalleryModal);
@@ -26,6 +31,7 @@ const openModal = async (index: number) => {
const lanes = ref(3);
const updateLanes = () => {
const previousValue = lanes.value;
if (window.innerWidth < 768) {
lanes.value = 1;
} else if (window.innerWidth < 1152) {
@@ -33,6 +39,10 @@ const updateLanes = () => {
} else {
lanes.value = 3;
}
if (previousValue !== lanes.value) {
resized.value = true;
}
};
const { data: galleryPhotos } = await useAsyncData("gallery", () =>
@@ -94,9 +104,15 @@ onUnmounted(() => {
<div
v-else
class="relative overflow-hidden rounded-sm cursor-pointer gallery-item opacity-0"
:class="{ 'gallery-item-down': (index % lanes) % 2 === 1 }"
:style="{ animationDelay: `${(index % lanes) * 300}ms` }"
class="relative overflow-hidden rounded-sm cursor-pointer opacity-0"
:class="{
'fade-in-focus-up': (index % lanes) % 2 === 1,
'fade-in-focus-down': (index % lanes) % 2 === 0,
'no-anim': resized,
}"
:style="{
animationDelay: `${(index % lanes) * 300}ms`,
}"
@click="openModal(index)"
>
<img
@@ -142,11 +158,15 @@ onUnmounted(() => {
}
}
.gallery-item {
.fade-in-focus-up {
animation: fadeInFocusUp 4s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}
.gallery-item-down {
.fade-in-focus-down {
animation: fadeInFocusDown 4s cubic-bezier(0.16, 1, 0.3, 1) forwards;
}
.no-anim {
animation-duration: 0s;
}
</style>