بازگشت به پروژه‌ها
توسعه وب0% Idle CPUنصب سریع با NPXشبیه‌سازی بالستیکدسترس‌پذیری و تاچ

اسلایدر پرتابی ری‌اکت (React Throwable Slider)

کامپوننت اسلایدر تعاملی و مبتنی بر فیزیک قلاب‌سنگ برای React و Tailwind CSS

نقش من

طراح و توسعه‌دهنده

بازه زمانی

۱۴۰۴

دسته‌بندی

توسعه وب

پروژه‌ها و کارهای من

7 فناوری استفاده‌شده

زمین بازی تعاملی کامپوننت

اسلایدر پرتابی قلاب‌سنگ رو همین‌جا زنده در مرورگر امتحان کنید

65%
Range: 0 → 100%Step: 1
+0.7 EV
Range: -3.0 → +3.0Step: 0.1
4220 Hz
Range: 20 → 20,000 HzStep: 100
گرانش
0.68
0.2 (Moon)1.4 (Jupiter)
قدرت پرتاب
0.14
0.05 (Gentle)0.30 (Cannon)
Accent Theme
لاگ زنده رویدادها و مقادیر
Master Volume:65%7:41:03 AM

💡 نکته: به صورت افقی بکشید تا مثل اسلایدر معمولی تغییر کنه، یا دستگیره رو به سمت پایین بکشید و رها کنید تا قلاب‌سنگ پرتاب بشه!

پیش‌نمایش و دمو

پرواز قلاب‌سنگ، پیش‌بینی مسیر و تنظیم مقادیر زنده

نحوه عملکرد اسلایدر رو در ویدیوی ضبط‌شده ببینید: کشیدن دستگیره به سمت پایین برای کشش کشسان، مشاهده مسیر نقطه‌چین پیش‌بینی و رهاسازی برای پرتاب و فرود روی مقدار موردنظر.

demo.local/react-throwable-slider
پیش‌نمایش ویدیویی زنده: شبیه‌سازی پرتاب بالستیک، پیش‌بینی مسیر روی کانواس، فرود و تنظیم افقی پیوسته.
HD 720p • 30fps

راهنمای تست و بررسی

  1. 1دستگیره اسلایدر رو به صورت افقی بکشید تا مثل یک اسلایدر معمولی مقدار تغییر کنه.
  2. 2دستگیره رو به سمت پایین بکشید تا حالت تیروکمان و کش‌های الاستیک فعال بشن.
  3. 3مسیر سهمی‌گون نقطه‌چین و مقدار پیش‌بینی‌شده فرود رو بررسی کنید.
  4. 4دستگیره رو رها کنید تا با شتاب جاذبه در هوا اوج بگیره و روی نوار فرود بیاد.
  5. 5افکت موج و لرزش فرود رو مشاهده کنید که مقدار جدید رو نهایی می‌کنه.
قابلیت‌های بررسی‌شده:پیش‌بینی زنده مسیر سهمی روی HTML5 Canvasحلقه انیمیشن بهینه برحسب تقاضا (0% Idle CPU)پشتیبانی یکپارچه از لمس، ماوس و ترک‌پد با Pointer Eventsناوبری کامل با کیبورد (Arrow keys, Home, End)ایمپورت آسان با یک دستور CLI از طریق NPX
این کامپوننت روی مخزن NPM منتشر شده و به سادگی با npx قابل دریافت است.

درباره این پروژه

یک کامپوننت اسلایدر خلاقانه و مبتنی بر شبیه‌سازی فیزیک قلاب‌سنگ برای React و Tailwind CSS. کاربر می‌تونه مثل اسلایدر معمولی دستگیره رو افقی بکشه یا اون رو مثل تیروکمان به سمت پایین بکشه تا با کمان پرتابی سهمی‌گون در طول نوار حرکت کنه و روی مقدار دلخواه بشینه! ویژگی‌هایی مثل مصرف رم و پردازنده در حد صفر در حالت سکون (0% Idle CPU)، سازگاری با نمایشگرهای لمسی و ماوس، کالیبراسیون مقادیر پله‌ای و اعشاری، پشتیبانی کامل از کیبورد و نصب فوق‌سریع با دستور NPX داره.

ویژگی‌ها و امکانات

ویژگی‌ها و امکانات

فیزیک پرتاب قلاب‌سنگ و کمان سهمی‌گون

محاسبه لحظه‌ای مسیر بالستیک روی بوم Canvas، شبیه‌سازی شتاب جاذبه در زمان پرواز و افکت موج بازخورد (Ripple) در لحظه فرود.

مصرف پردازنده صفر در حالت سکون (0% Idle CPU)

حلقه انیمیشن requestAnimationFrame تنها در حین تعامل کاربر و پرواز فعاله و بلافاصله پس از نشستن دستگیره خاموش می‌شه.

نصب و تزریق بدون دغدغه با NPX

توسعه‌دهندگان می‌تونن مثل کامپوننت‌های shadcn/ui تنها با یک دستور (`npx react-throwable-slider`) کامپوننت رو به پروژه اضافه کنن.

مدل تعاملی دوگانه (تنظیم نرم یا پرتاب هیجانی)

تغییر نرم افقی برای مقادیر حساس و دقیق، همراه با سوییچ هوشمند به حالت تیروکمان در صورت کشیدن به سمت پایین.

پشتیبانی از گام‌های پله‌ای و مقادیر علامت‌دار

پشتیبانی از فواصل پله‌ای دلخواه (مثلاً ۰.۱، ۱، ۱۵) و نمایش خودکار علامت‌های مثبت/منفی برای پارامترهایی مثل گین صدا و نوردهی دوربین.

دسترس‌پذیری کامل کیبورد و صفحه‌خوان

پشتیبانی استاندارد از ARIA Slider، کلیدهای جهت‌نما، Home و End، به همراه مدیریت یکپارچه رویدادهای اشاره‌گر (Pointer Events).

پشت‌صحنه فنی و معماری

پشت‌صحنه فنی و معماری

این کامپوننت با React 19، تایپ‌اسکریپت و استایل‌های Tailwind CSS طراحی شده و برای رندر مسیر پرتاب و کش‌ها از HTML5 Canvas 2D بهره می‌بره. برای جلوگیری از ری‌رندرهای مکرر ری‌اکت در سرعت ۶۰ یا ۱۲۰ فریم بر ثانیه، مختصات پرواز در Refهای محلی نگهداری می‌شن و تنها مقدار نهایی پس از فرود به استیت ری‌اکت فرستاده می‌شه.

نکات برجسته فنی

  • معماری ترکیبی Canvas + DOM برای تفکیک محاسبات فیزیک پرسرعت از چرخه ری‌رندرهای ری‌اکت
  • توقف کامل حلقه requestAnimationFrame در زمان سکون اسلایدر برای بهینه‌سازی باتری و منابع سیستم
  • مقیاس‌بندی هوشمند با ضریب پیکسلی دستگاه (DPR) برای وضوح کریستالی در نمایشگرهای رتینا
  • استفاده از Pointer Events API و setPointerCapture برای جلوگیری از قطع لمس هنگام خروج از کادر
  • ارائه هوک و Ref کنترلی (ThrowableSliderHandle) برای قابلیت reset و getValue به شکل دستوری
  • پکیجینگ دوگانه به عنوان کتابخانه NPM و اسکریپت CLI برای استفاده در npx

فرانت‌اند و رابط کاربری

React 19TypeScriptTailwind CSSHTML5 Canvas 2D

فیزیک و گرافیک

Euler IntegrationParabolic BallisticsPointer Events APIResizeObserver

انتشار و ابزارها

NPM PackageNPX CLI ScaffolderViteESLint
چالش‌ها و راه‌حل‌های مهندسی

چالش‌ها و راه‌حل‌های مهندسی

چالش مهندسی

جلوگیری از اتلاف شارژ باتری و بار پردازشی ناشی از اجرای مداوم requestAnimationFrame در کامپوننت‌های رابط کاربری.

راه‌حل و تصمیم معماری

پیاده‌سازی چرخه حیات برحسب تقاضا (On-Demand): حلقه انیمیشن تنها با Pointer Down فعال می‌شود، پرواز و افکت موج فرود را متحرک می‌کند و بلافاصله پس از نشستن دستگیره متوقف می‌گردد.

چالش مهندسی

تفکیک هوشمند کشیدن افقی برای تنظیم دقیق از کشیدن عمودی برای پرتاب قلاب‌سنگ بدون تاخیر در دریافت ورودی.

راه‌حل و تصمیم معماری

اعمال آستانه هیسترزیس جهتی در کنترلر جابجایی؛ انحراف‌های عمودی کمتر از ۶ پیکسل به عنوان کشیدن خطی معمولی در نظر گرفته می‌شوند و عبور از این حد حالت کمان پرتابی را فعال می‌کند.

چالش مهندسی

تضمین کیفیت و شفافیت بالای خطوط منحنی کانواس در صفحات با تراکم پیکسلی مختلف و تغییر اندازه صفحه.

راه‌حل و تصمیم معماری

ترکیب ResizeObserver و نسبت پیکسلی دستگاه (window.devicePixelRatio) روی حافظه بافر کانواس، که ابعاد فیزیکی رندر را بدون به هم زدن چیدمان CSS هماهنگ نگه می‌دارد.

Deep Dive

مکانیک شبیه‌سازی فیزیک و کانواس ۲ بعدی

نوآوری اصلی این اسلایدر در پیوند دادن رابط کاربری دقیق و مرسوم وب با فیزیک پرتاب بالستیک است، بدون اینکه تاخیری در پاسخ‌دهی به ورودی‌های لمسی یا ماوس به وجود آید.

معادله مسیر پرواز سهمی

مسیر پرتاب با روش انتگرال‌گیری اویلر به ازای هر گام زمانی محاسبه می‌شود:

$$x(t) = x_0 + v_x \cdot t$$ $$y(t) = y_0 + v_y \cdot t + \frac12 g \cdot t^2$$

با تغییر مقدار شتاب گرانش $g$ و ضریب نیروی پرتاب، می‌توان رفتار اسلایدر را برای سناریوهای مختلف بازی یا تنظیمات سیستم شخصی‌سازی کرد.