React · React Native · 16 مكوّنًا
التفاعلات الصعبة، جاهزة.
Animated Chorus مجموعة مكوّنات حركة للتفاعلات التي يصعب إتقانها يدويًا: أرقام تتدحرج، ونص متدفق، وتبديلات يتغيّر معها الحجم، ولوحات منبثقة، ومقلّبات صفحات، وإجراءات بالسحب، وقوائم لا تحرّك إلا ما تغيّر. وسم واحد وبياناتك. لا provider ولا إعداد.
npm install @kkwaenggwari/animated-chorusمقيس على هذا البناء
Chrome، 2026-09-28. كل الشروط والعيّنات في دليل الأداء. كيف قيس
- 28.0KBKB gzip لكل التصديرات الستة عشر
نقطة دخول الويب كاملة، مصغّرة. React هي التبعية النظيرة الوحيدة.
- 0استدعاءات إطارات JS أثناء الحركة
رقم وارتفاع وتمييز تتغيّر معًا: يشغّل المتصفح الحركات الـ 12 كلها.
- 1اعتماد React لكل تغيير في القيمة
يُعاد عرض
MotionNumberحين تتغيّر القيمة، لا أثناء تدحرجها أبدًا. - 11اعتمادات React لـ 3000 حرفًا متدفقًا
يضيف
MotionStreamالأحرف مباشرة ويدمجها في React بضع مرات في الثانية.
01الأسهل
وسم واحد وبياناتك
كل مكوّن يعمل وحده: لا provider ولا مكوّن غلاف ولا استدعاء إعداد. تأخذ المجموعات items وrenderItem، ويبقى تخطيطك ونصوصك وأنماطك ملكك.
- استورد مكوّنًا ومرّر قيمة. هذا هو التكامل كله.
- تقرأ القوائم وعلامات التبويب ومقلّبات الصفحات مصفوفتك؛ والمفاتيح افتراضيًا
item.id. - يبقى النص نصًا حقيقيًا: يلتف، ويتحجّم مع الخط، ويمكن تحديده.
<MotionNumber value={total} />;<MotionSwap value={status}>{label}</MotionSwap>;<MotionHeight open={open}>{details}</MotionHeight>;<MotionHighlight items={tabs} value={tab} onValueChange={setTab} />;<MotionList items={tasks} renderItem={(task) => task.title} />;<ProgressRing value={progress} />;
ستة مكوّنات حية، وسطر الشيفرة الواحد خلف كلٍّ منها.
جارٍ تجهيز المثال…
02الأسرع
يشغّله المتصفح. ويبقى React ساكنًا.
على الويب لا توجد مكتبة حركة لتحميلها: تسلّم المكوّنات حركتها إلى Web Animations API، فلا يكلّف رقم يتدحرج أو لوحة يتغيّر حجمها أي JavaScript لكل إطار ولا أي عرض React أثناء الحركة.
- 0 استدعاء إطارات JS بينما تعمل 12 حركات معًا.
- اعتماد React واحد لكل تغيير في القيمة، لا لكل إطار.
- النص المتدفق: 11 اعتمادات React لـ 3000 حرفًا. يعدّ المثال أدناه عمليات عرضه بنفسه.
جارٍ تجهيز المثال…
03الأكثر استقرارًا
قاطع أي شيء. لا شيء يقفز.
كل قيمة جديدة تبدأ مما على الشاشة والنوابض تحتفظ بسرعتها، فتبدو النقرات السريعة ودفعات البيانات والانعكاسات مقصودة. وحين تنتهي الحركة لا يبقى شيء قيد التشغيل.
- الأرقام لا تنقسم أبدًا: تنزلق الخانات المتبقية أثناء تدحرجها.
- 200 قيم جديدة بفاصل 5 ms: تبقى بعدها 0 حركات، والنص النهائي دقيق.
- آمن مع React StrictMode. في تطبيق React Native في الخلفية تستقر الحركة على حالتها النهائية.
جارٍ تجهيز المثال…
16 مكوّنًا، مجمّعة حسب المهمة
الأرقام والنصوص، والمحتوى الذي يتغيّر حجمه، والاختيار، والقوائم، والإيماءات، والطبقات العلوية، والتقدّم. لكلٍّ منها منصة تجربة حية بجانبها props الخاصة به.
كل المكوّناتالأرقام والنصوص
المحتوى والحجم
الاختيار والصفحات
القوائم
الإيماءات
الطبقات العلوية
التقدّم
- إجابة المحادثةاقتراحات تنطوي، وإجابة تتدفق بإيقاع ثابت، وسطر حالة يتبدّل.
MotionStreamMotionListMotionSwapMotionHeight - ملخص الدفعتتدحرج الكميات ومجاميع الأسطر والإجمالي مع تغيّر السلة؛ ويدخل إشعار القسيمة ويخرج؛ والدفع يتطلب ضغطًا مطوّلًا مقصودًا.
MotionListMotionNumberMotionPresenceMotionHold - البريد الواردعلامات تبويب للتصفية بأعداد حية، وصفوف يمكن سحبها بعيدًا، وقائمة تسدّ الفراغ.
MotionHighlightMotionListMotionSwipeMotionNumber - خلاصة الصورتنقّل بين الصور بالسحب، وانتقل عبر الصور المصغّرة، وافتح أي صورة بملء الشاشة واسحب تفاصيلها إلى الأعلى.
MotionPagerMotionHighlightMotionZoomMotionSheet
الاستيراد نفسه على الويب وفي React Native
يختار Metro التنفيذ الأصلي، وتختار حزّامات الويب تنفيذ DOM. كل منصة تشغّل الحركة بأفضل ما تستطيع.
// Web and React Native: the same import.
import { MotionNumber, MotionList } from '@kkwaenggwari/animated-chorus';
export function Score({ points, players }) {
return (
<>
<MotionNumber value={points} />
<MotionList items={players} renderItem={(player) => player.name} />
</>
);
}| الجزء | الويب | React Native |
|---|---|---|
| Transform وopacity | Web Animations API، ونوابض محسوبة تحليليًا | Animated مع المشغّل الأصلي |
| العرض والارتفاع | Web Animations API | Animated مع مشغّل JS، لأنه تخطيط |
| النص المتدفق | أحرف تُضاف وتظهر بالتدريج؛ بضع عمليات عرض React في الثانية | Text حقيقي، يظهر من دون تلاشٍ |
| اللوحات والتكبير | dialog أصلي في الطبقة العليا | Modal شفاف؛ يغلقه زر الرجوع |
ابدأ في دقيقتين
ثبّت، واستورد مكوّنًا، ومرّر قيمة.
npm install @kkwaenggwari/animated-chorus