motion-variants

ui

src

tsx
// npm i motion

import * as motion from "motion/react-client";

export default function Page() {

    const container = {
        hidden: {
            opacity: 0,
        },
        visible: {
            opacity: 1,
            transition: {
                staggerChildren: 0.3,
            }
        }
    }

    const item = {
        hidden: {
            opacity: 0,
            y: 100
        },
        visible: {
            opacity: [ 0, 0.3, 1 ],
            y: 0,
        }
    }

    const images = [
        "https://cdn.pixabay.com/photo/2017/11/13/16/39/ginkgo-2946131_1280.jpg",
        "https://cdn.pixabay.com/photo/2017/04/06/15/02/girls-2208489_1280.jpg",
        "https://cdn.pixabay.com/photo/2020/02/27/08/48/sunset-4883887_1280.jpg",
        "https://cdn.pixabay.com/photo/2016/01/08/16/04/woman-1128523_1280.jpg",
        "https://cdn.pixabay.com/photo/2016/06/21/23/06/woman-1472191_1280.jpg",
        "https://cdn.pixabay.com/photo/2020/07/30/10/29/woman-5450043_1280.jpg",
    ]

    return (
        <motion.div className="grid gap-5 grid-cols-1 md:grid-cols-2 lg:grid-cols-3"
                    variants={ container }
                    initial="hidden"
                    animate="visible">
            {
                images.map((url, i) => (
                    <motion.img className="w-full aspect-video"
                                src={ url }
                                alt=""
                                key={ i }
                                variants={ item }/>
                ))
            }
        </motion.div>
    )
}

video