Chuyển động cho React DOM · API Animated của React Native
Viết chuyển động một lần. Chạy mượt, không bao giờ gãy.
Animated đưa Animated của React Native lên web. Một giá trị điều khiển bao nhiêu phần tử cũng được mà không render React ở mỗi khung hình, chuyển động được hỗ trợ do chính trình duyệt phát, và mọi lần ngắt đều tiếp tục từ những gì đang trên màn hình.
npm install @kkwaenggwari/animatedMột giá trị đồng hồ điều khiển sóng của cả 64 hình. Di chuyển con trỏ trên sân khấu.
Đo trên bản build này
Đo bằng bản build 1.0.0 trên Chrome headless ở một PC để bàn. Số liệu phụ thuộc vào thiết bị. Cách chúng tôi đo
- 0.00msJavaScript mỗi khung hình khi 400 phần tử di chuyển
Chuyển động transform và opacity có giới hạn trên phần tử Animated do trình duyệt phát. Các callback khung hình của trang không phải làm gì.
- 0.13msJavaScript mỗi khung hình khi một giá trị điều khiển 10.000 phần tử
Giá trị ghi một biến CSS; mỗi phần tử tự suy ra kiểu dáng của mình từ biến đó trong CSS.
- 0Lần render React trong lúc chuyển động
Giá trị không bao giờ đi qua state React. Component render khi props của bạn thay đổi, không phải khi khung hình đổi.
01 · Đơn giản
API bạn đã biết, trên style React thông thường
timing, spring, interpolate, loop và Animated.event giữ nguyên tên và cấu hình của React Native. Giá trị đi thẳng vào prop style thông thường, nên không cần học component đặc biệt nào trước chuyển động đầu tiên.
- Mang mã React Native sang bằng cách đổi
Animated.ViewthànhAnimated.div. - Một giá trị có thể cùng lúc di chuyển một dải, một mặt số và một hàng thẻ, mỗi thứ với khoảng riêng.
useAnimatedsở hữu công thức: bắt đầu khi mount, chạy lại khi phụ thuộc thay đổi và dọn dẹp khi unmount.
Đang chuẩn bị ví dụ…
Lời gọi giống hệt React Native
// React Native
<Animated.View style={{ transform: [{ rotate }] }} />
// React DOM with @kkwaenggwari/animated — the rest is identical
<Animated.div style={{ transform: [{ rotate }] }} />
const spin = useAnimatedValue(0);
const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: ['0deg', '360deg'] });
Animated.loop(
Animated.timing(spin, { toValue: 1, duration: 900, easing: Easing.linear, useNativeDriver: true }),
).start();02 · Nhanh
Không render React ở mỗi khung hình
Giá trị của hook là một biến CSS. Nội suy tuyến tính và phép tính trở thành biểu thức calc() chính xác của biến đó, nên mỗi khung hình chỉ là một lần ghi và phần còn lại do trình duyệt tính. Chuyển động transform và opacity có giới hạn trên phần tử Animated.<tag> do trình duyệt phát mà không cần callback khung hình.
- Đổi số chấm: bộ đếm cho thấy React render một lần cho mỗi thay đổi, không bao giờ theo từng khung hình.
scopeghi giá trị một lần trên phần tử chứa thay vì trên từng phần tử.inspect(element)cho biết mỗi thuộc tính dùng đường nào và vì sao.
Đang chuẩn bị ví dụ…
03 · Ổn định
Ngắt ở đâu cũng được. Nó vẫn tiếp tục.
Mục tiêu mới bắt đầu từ chỗ phần tử đang ở trên màn hình, và lò xo còn giữ cả vận tốc, nên quay đầu giữa chừng sẽ uốn mượt thay vì dừng lại trước. Bộ điều khiển khai báo trong hook dừng và được giải phóng khi bị thay thế và khi unmount, còn markup render phía máy chủ vẫn tiếp tục hoạt ảnh sau khi hydrate.
- Nhấp nhanh hai lần: với
springđường đi uốn cong, vớitimingvị trí được giữ nhưng một đường cong mới bắt đầu. - Dừng lại thì giá trị ở yên đó; không có gì nhảy đến trạng thái cuối.
- Không còn vòng lặp khung hình bị bỏ quên sau khi unmount, đổi route hay tab bị ẩn.
Đang chuẩn bị ví dụ…
- Dock nam châmBiểu tượng phóng to khi con trỏ lướt qua, đẩy các biểu tượng bên cạnh ra và lắng lại khi con trỏ rời đi.
moveInputfollowuseAnimatedCSSmultiply - Chồng thẻ vuốtKéo thẻ trên cùng. Quá ngưỡng thì nó bay đi; nếu không, nó bật trở lại.
dragInputuseAnimatedListenerAnimated.div - Thư viện ảnh dùng chungMột ô phóng to thành màn hình chi tiết rồi thu nhỏ lại vào lưới.
Animated.SceneAnimated.Keepmove
Xây trên Animated
Cần component có sẵn? Animated Chorus.
Số cuộn, điểm nhấn thẻ di chuyển, tiến độ, sheet và danh sách hoạt ảnh gắn thẳng vào React và React Native. Ba thứ này đang chạy ngay trên trang này.
Ghé Animated ChorusBắt đầu trong ba phút
Cài gói, cho giá trị đầu tiên chuyển động, rồi chọn hướng dẫn cho việc bạn đang làm.
npm install @kkwaenggwari/animated