Компоненты/Перспективная лента фото

Перспективная лента фото

29 сентября 2026

Две колонки кадров выплывают из темноты с наклоном и перекосом, выпрямляются в центре и снова заваливаются.

Установка

npm install clsx gsap motion tailwind-merge
pnpm add clsx gsap motion tailwind-merge
yarn add clsx gsap motion tailwind-merge
bun add clsx gsap motion tailwind-merge

Файлы

perspective-scroll-grid.tsx
НазадКарусель с глубинойДалееЛайтбокс

Лента из двух колонок фотографий в собственной прокрутке. Каждый кадр появляется снизу затемнённым и размытым, наклонённым назад и перекошенным к краю, в центре экрана становится ровным и чётким, а уходя вверх снова заваливается и гаснет.

Эффект показан дважды: на GSAP и на motion — второй вариант движется мягче. Ширина ленты, зазор между кадрами и скругление общие для обеих сцен.

Вручную

Скопируйте эти файлы в components/perspective-scroll-grid/:

Общие помощники положите в lib/ проекта:

Проверьте алиас путей. Импорты в коде выше записаны как @/components/... и @/lib/.... Нужен алиас "@/*" на папку, где лежат components/ и lib/, в tsconfig.json — или поправьте импорты под свои пути.

Использование

import { PerspectiveScrollGrid } from "@/components/perspective-scroll-grid/perspective-scroll-grid";

const photos = Array.from({ length: 12 }, (_, index) => `/photos/${index + 1}.webp`);

export function Feed() {
return (
  <div className="h-[720px]">
    <PerspectiveScrollGrid images={photos} width={420} gap={24} />
  </div>
);
}

Пропсы

Пропс
Описание
images

Фотографии ленты

Тип string[]

gsapHint?

Подпись первой ленты

Тип ReactNode·По умолчанию "GSAP Perspective scroll effect"

motionHint?

Подпись второй ленты

Тип ReactNode·По умолчанию "Framer motion Perspective scroll effect"

width?

Максимальная ширина ленты в пикселях

Тип number·По умолчанию 384

gap?

Зазор между кадрами в пикселях

Тип number·По умолчанию 32

radius?

Скругление кадров в пикселях

Тип number·По умолчанию 4

className?

Классы прокручиваемого контейнера

Тип string