دیوارِ شناورDrift Wall

دیواری از ستون‌های کاشیِ تصویر روی یه صفحه‌ی سه‌بعدی: هر ستون با سرعتِ خودش پیوسته بالا و پایین می‌ره، صفحه با نشانگر کج می‌شه، لبه‌ها توی ماسکِ شعاعی محو می‌شن و کاشیِ زیرِ نشانگر جلو می‌آد و تمام‌رنگ می‌شه.

محمدجواد

ساخته شده توسط محمدجواد

سازنده فارسی‌فای، بچه دولوپر

وابستگی‌ها

بدون وابستگی

نوع تعامل

رانشِ ستون‌ها خودگردان و دائمیـه؛ با `pauseOnHover` با ورودِ نشانگر می‌ایسته و ستونِ کاشیِ زیرِ نشانگر همیشه می‌ایسته. حرکتِ نشانگر صفحه رو با پارالاکس کج می‌کنه و کاشیِ زیرِ نشانگر با `lift` جلو می‌آد، از پرده بیرون می‌آد و رنگی می‌شه. کاشی‌ها با Tab هم قابلِ فوکوسن.

پراپ‌ها

گزینه‌هایی که می‌تونی به کامپوننت بدی؛ ستاره‌دارها اجباری‌اند.

items
Array<{ image: string; title?: string; href?: string }>پیش‌فرض: ۱۵ عکسِ نمونه

کاشی‌های دیوار؛ ستون‌بندی با گردشِ `i % columns`. `title` برچسبِ دسترس‌پذیریِ کاشی و `href` مقصدِ کلیک است (بدونِ href، کاشی دکمه‌ی فوکوس‌پذیر می‌ماند).

columns
numberپیش‌فرض: 5

تعداد ستون‌های دیوار.

tileWidth
numberپیش‌فرض: 200

پهنای هر کاشی بر حسبِ پیکسل.

tileHeight
numberپیش‌فرض: 132

بلندی هر کاشی بر حسبِ پیکسل (بدونِ فاصله).

gap
numberپیش‌فرض: 18

فاصله‌ی کاشی‌ها بر حسبِ پیکسل.

radius
numberپیش‌فرض: 14

گردیِ گوشه‌ی کاشی‌ها.

نصب

۱. این آدرس رو یک‌بار توی components.json بذار تا shadcn مخزن فارسی‌فای رو بشناسه.

components.jsonjson
{
  "registries": {
    "@farsify": "https://farsify.ir/r/{name}.json"
  }
}

۲. بعد با دستورِ زیر کامپوننت رو نصب کن.

npx shadcn@latest add @farsify/drift-wall

پیش‌نیاز: Tailwind CSS v4 و صفحهٔ راست‌به‌چپ dir="rtl".

نمونه

drift-wall.tsxtsx
"use client";

import DriftWall from "@/components/farsify/drift-wall";

const tiles = [
  { image: "/images/tile-1.jpg", title: "قله" },
  { image: "/images/tile-2.jpg", title: "جنگل" },
  { image: "/images/tile-3.jpg", title: "آبشار" },
];

export function DriftingWall() {
  return (
    <div style={{ height: 520 }}>
      <DriftWall items={tiles} />
    </div>
  );
}

// دیوارِ پس‌زمینه: با هاور بایستد و لبه‌ها بیشتر محو شوند
<DriftWall items={tiles} pauseOnHover fade={0.4} columns={6} />

// دیوارِ ایستای سه‌بعدی که فقط با نشانگر نفس می‌کشد
<DriftWall items={tiles} speed={0} parallax={0.9} depth={180} />

// رانشِ تندِ پرانرژی به سمتِ پایین
<DriftWall items={tiles} speed={95} direction="down" variance={0.3} />

// کاشی‌های سیاه‌وسفید که زیرِ نشانگر رنگ می‌گیرند
<DriftWall items={tiles} grayscale dim={0.7} lift={96} />

نکته‌ها

  • بدونِ هیچ وابستگی: حلقه‌ی rAFِ خودکافه با میراییِ نمایی برای پارالاکس و ایستِ نرمِ ستون‌ها.
  • برای پس‌زمینه‌ی بخش‌ها خوبه: `pauseOnHover` رو روشن کن تا متنِ روی دیوار خوانا بمونه و `fade` رو کم کن تا لبه‌ها بیشتر محو شن.
  • با `speed: 0` و `parallax` روشن، دیوارِ ایستای سه‌بعدی می‌سازی که فقط با نشانگر نفس می‌کشه.
  • توی `prefers-reduced-motion` رانش کامل می‌ایسته (کاشی‌ها روی آفستشون می‌مونن) و پارالاکس خاموشه؛ هاور و فوکوس سرِ جاشونن.

مجوز

کد بعد از نصب مالِ خودته؛ هر تغییری خواستی بده و توی پروژه‌ی خودت نگهش دار. برای پروژه‌های شخصی و تجاری آزاده، حتی اگه کدت بسته باشه. فقط اسم و لینک فارسی‌فای رو یه جا توی پروژه نگه دار.