React · React Native · 16 component
Tương tác khó, đã hoàn thiện.
Animated Chorus là bộ component chuyển động cho những tương tác khó làm đúng bằng tay: số cuộn, văn bản truyền dần, hoán đổi có đổi kích thước, sheet, pager, thao tác vuốt và danh sách chỉ tạo hoạt ảnh cho phần thay đổi. Một thẻ và dữ liệu của bạn. Không provider, không thiết lập.
npm install @kkwaenggwari/animated-chorusĐo trên bản build này
Chrome, 2026-09-28. Mọi điều kiện và mẫu đo có trong hướng dẫn hiệu năng. Cách đo
- 28.0KBKB gzip cho cả 16 export
Toàn bộ điểm vào web, đã thu gọn. React là peer duy nhất.
- 0Callback khung hình JS khi đang hoạt ảnh
Một con số, một chiều cao và một điểm nhấn thay đổi cùng lúc: trình duyệt phát cả 12 hoạt ảnh.
- 1Commit React cho mỗi lần đổi giá trị
MotionNumberrender khi giá trị thay đổi, không bao giờ trong lúc cuộn. - 11Commit React cho 3000 ký tự truyền dần
MotionStreamnối thẳng ký tự và gộp vào React vài lần mỗi giây.
01Dễ nhất
Một thẻ và dữ liệu của bạn
Mỗi component tự hoạt động: không provider, component bọc hay lời gọi thiết lập. Các bộ sưu tập nhận items và renderItem, còn bố cục, văn bản và kiểu dáng vẫn là của bạn.
- Import một component và truyền giá trị. Toàn bộ việc tích hợp chỉ có vậy.
- Danh sách, tab và pager đọc mảng của bạn; key mặc định là
item.id. - Văn bản vẫn là văn bản thật: xuống dòng, co giãn theo phông chữ và chọn được.
<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} />;
Sáu component trực tiếp, và một dòng mã đằng sau mỗi cái.
Đang chuẩn bị ví dụ…
02Nhanh nhất
Trình duyệt phát. React đứng yên.
Trên web không cần tải thư viện hoạt ảnh nào: component giao chuyển động cho Web Animations API, nên một con số đang cuộn hay một bảng đang đổi kích thước không tốn JavaScript mỗi khung hình và không render React khi chuyển động.
- 0 callback khung hình JS khi 12 hoạt ảnh chạy cùng lúc.
- Một commit React cho mỗi lần đổi giá trị, không phải mỗi khung hình.
- Văn bản truyền dần: 11 commit React cho 3000 ký tự. Ví dụ bên dưới tự đếm số lần render của nó.
Đang chuẩn bị ví dụ…
03Ổn định nhất
Ngắt bất cứ thứ gì. Không bao giờ nhảy.
Mỗi giá trị mới bắt đầu từ những gì đang trên màn hình và lò xo giữ nguyên tốc độ, nên những cú nhấp nhanh, dữ liệu dồn dập hay đổi chiều đều trông có chủ đích. Khi chuyển động kết thúc, không còn gì chạy.
- Con số không bao giờ bị tách rời: các chữ số còn lại trượt trong lúc cuộn.
- 200 giá trị mới cách nhau 5 ms: sau đó còn 0 hoạt ảnh và văn bản cuối chính xác.
- An toàn với React StrictMode. Trong ứng dụng React Native chạy nền, chuyển động về thẳng trạng thái cuối.
Đang chuẩn bị ví dụ…
16 component, nhóm theo việc chúng làm
Số và văn bản, nội dung đổi kích thước, lựa chọn, danh sách, cử chỉ, lớp phủ và tiến độ. Mỗi cái có một bàn làm việc trực tiếp với props bên cạnh.
Tất cả componentSố và văn bản
Nội dung và kích thước
Lựa chọn và phân trang
Danh sách
Cử chỉ
Lớp phủ
Tiến độ
Kết hợp lại
Màn hình hoàn chỉnh kết hợp nhiều component, mỗi cái có cài đặt nằm ngoài ví dụ.
Tất cả ví dụ- Câu trả lời trong trò chuyệnGợi ý thu gọn lại, câu trả lời truyền dần với nhịp đều và dòng trạng thái hoán đổi.
MotionStreamMotionListMotionSwapMotionHeight - Tóm tắt thanh toánSố lượng, tổng từng dòng và tổng tiền cuộn khi giỏ hàng thay đổi; thông báo mã giảm giá đi vào và rời đi; thanh toán đòi hỏi nhấn giữ có chủ đích.
MotionListMotionNumberMotionPresenceMotionHold - Hộp thưTab lọc có số đếm trực tiếp, hàng vuốt đi được và danh sách tự khép khoảng trống.
MotionHighlightMotionListMotionSwipeMotionNumber - Bảng tin ảnhVuốt qua ảnh, nhảy bằng ảnh thu nhỏ, mở bất kỳ ảnh nào ra toàn màn hình và kéo lên xem chi tiết.
MotionPagerMotionHighlightMotionZoomMotionSheet
Cùng một import trên web và React Native
Metro chọn bản hiện thực native, còn bundler web chọn bản DOM. Mỗi nền tảng phát chuyển động theo cách tốt nhất của mình.
// 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} />
</>
);
}| Phần | Web | React Native |
|---|---|---|
| Transform và độ mờ | Web Animations API, lò xo được lấy mẫu giải tích | Animated với native driver |
| Chiều rộng và chiều cao | Web Animations API | Animated với JS driver, vì đây là bố cục |
| Văn bản truyền dần | Ký tự được nối và hiện dần; vài lần render React mỗi giây | Text thật, hiện ra không có hiệu ứng mờ |
| Sheet và thu phóng | dialog native ở top layer | Modal trong suốt; nút quay lại sẽ đóng nó |
Bắt đầu trong hai phút
Cài đặt, import một component, truyền giá trị.
npm install @kkwaenggwari/animated-chorus