Marqueev1.0.0
ردیف یا ستونی که بینهایت و بدون درز اسکرول میکند: برای دیوارِ لوگوی مشتریان، تستیمونیالهای چرخشی یا یک تیکرِ متنی. کاملاً با CSS ساخته شده (بدون JS/requestAnimationFrame)، پس هزینهٔ رندرش صفر است و روی موبایل هم روان کار میکند.
این کامپوننت فعلاً برای ۱ فریمورک از ۴ فریمورک آماده است.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نصب
با CLI اختصاصی digdesign کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگیها و فایلها خودکار اضافه میشوند.
npx digdesign@latest add https://docs.digdesign.ir/r/marquee.jsonpnpm dlx digdesign@latest add https://docs.digdesign.ir/r/marquee.jsonyarn dlx digdesign@latest add https://docs.digdesign.ir/r/marquee.jsonbunx --bun digdesign@latest add https://docs.digdesign.ir/r/marquee.jsonاین کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
استفاده
import { Marquee, MarqueeItem } from "@/components/ui/marquee"این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
ترکیب اجزا
محتوای Marquee بر اساسِ repeat (پیشفرض ۲) چند بار پشتِسرِهم رندر میشود و کل ردیف با یک @keyframes به اندازهٔ عرضِ یک نسخه جابهجا میشود؛ چون نسخهها عیناً یکساناند، لحظهٔ برگشت به نقطهٔ شروع دیده نمیشود. برای فهرستهای خیلی کوتاه (مثلاً ۳ آیتم) اگر عرضشان از صفحه کمتر است، repeat را بیشتر کنید تا حفرهای در میانهٔ چرخه نیفتد.
duration و gap با دو متغیرِ CSS (--duration، --gap) روی خودِ عنصر ست میشوند، پس چند Marquee با سرعتهای متفاوت در یک صفحه بدون تداخل کار میکنند.
دسترسپذیری
- محتوای تکرارشده با aria-hidden از دیدِ صفحهخوان پنهان میشود؛ فقط نسخهٔ اول قابلخواندن میماند.
- انیمیشنِ پیوسته برای کاربرانِ حساس به حرکت آزاردهنده است؛ اگر محتوای Marquee صرفاً تزئینی نیست (مثلاً حاوی لینک است)، pauseOnHover بدهید تا با هاور/فوکوس متوقف شود.
- این کامپوننت prefers-reduced-motion را خودکار رعایت نمیکند؛ برای رعایتِ کامل، در پروژهٔ خودتان media query را چک کنید و در آن حالت repeat={1} و بدونِ انیمیشن رندر کنید.
مرجع API
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| direction | "forward" | "reverse" | "forward" | جهتِ حرکت. |
| vertical | boolean | false | اسکرولِ عمودی بهجای افقی؛ والد باید ارتفاعِ مشخص داشته باشد. |
| pauseOnHover | boolean | false | توقفِ حرکت هنگامِ هاور روی Marquee. |
| duration | number | 40 | مدتِ یک دورِ کامل بر حسب ثانیه؛ عددِ بزرگتر یعنی کندتر. |
| gap | number | 16 | فاصلهٔ بین نسخههای تکرارشده بر حسب پیکسل. |
| repeat | number | 2 | چند بار محتوا تکرار شود؛ برای فهرستهای کوتاه بیشتر کنید. |
| fade | boolean | false | محوشدنِ لبهها با گرادیانِ ماسک. |
این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
نمونهها
دیوارِ لوگو
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
محوشدنِ لبهها (fade)
روی پسزمینهٔ یکدست، fade لبههای ورود/خروجِ محتوا را محو میکند.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
توقف با هاور
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
عمودی
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
کدام نمونه برای کدام موقعیت
| نمونه | کجا به کار میآید |
|---|---|
| دیوارِ لوگو | بخشِ «مورد اعتمادِ» در صفحهٔ فرود |
| محوشدنِ لبهها (fade) | روی پسزمینهٔ یکدست، fade لبههای ورود/خروجِ محتوا را محو میکند. |
| توقف با هاور | — |
| عمودی | ستونِ تستیمونیالهای در حال چرخش |
دستورالعمل استفاده
برای محتوای تزئینی، نه ناوبریِ اصلی
انجام بده
دیوارِ لوگو یا یک تیکرِ خبری برای Marquee مناسب است؛ کاربر مجبور نیست منتظرِ رسیدنِ آیتمِ خاصی بماند.
انجام نده
منوی ناوبریِ اصلی را داخل Marquee نگذارید؛ چون مدام حرکت میکند، کلیککردنِ دقیق روی یک آیتم سخت میشود.