Vấn đề rung cảm của yếu tố trên các thiết bị ios – GSAP
Xin chào,
Trong bản demo của bạn có một số vấn đề, đầu tiên hãy sử dụng hook useGSAP của chúng tôi vì điều đó giúp đơn giản hóa việc tạo và dọn dẹp hoạt ảnh trong React (bao gồm cả Next, Remix, v.v.). Đó là một sự thay thế dễ sử dụng cho useEffect () / useLayoutEffect (). Tất cả các đối tượng liên quan đến GSAP (các hoạt ảnh, ScrollTriggers, v.v.) được tạo ra trong khi hàm thực thi sẽ được thu thập và quay trở lại khi hook bị hủy bỏ.
Dưới đây là cách hoạt động của nó:
const container = useRef(); // phần tử cấp độ gốc của thành phần của bạn (cho phạm vi phạm vi văn bản lựa chọn là tùy chọn)
useGSAP(() =>
// mã gsap ở đây…
, dependencies: (endX), scope: container ); // đối tượng cấu hình cung cấp linh hoạt tối đa
Hoặc nếu bạn muốn, bạn có thể sử dụng cùng một chữ ký phương thức như useEffect ():
useGSAP(() =>
// mã gsap ở đây…
, (endX)); // cài đặt Mảng phụ thuộc đơn giản giống như useEffect ()
Mẫu này tuân theo React hướng dẫn tốt nhất.
Chúng tôi mạnh mẽ khuyến khích đọc hướng dẫn React mà chúng tôi đã tổ chức tại https://gsap.com/resources/React/
Sử dụng hook sẽ đảm bảo rằng DOM được hiển thị đúng cách để bạn không cần phải dùng đến thời gian chờ như bạn đang sử dụng trong mã của bạn.
Nhưng tôi nghĩ vấn đề nằm ở đây:
gsap.to(elementToMove,
x: 0,
ease: ‘none’,
scrollTrigger:
trigger: container,
start: ‘top bottom-=10%’,
end: ‘top top-=25%’,
scrub: true,
ease: ‘none’,
onUpdate: (self) =>
const progress = self.progress;
const currentXValue = -progress * xValue;
gsap.set(elementToMove, x: currentXValue );
,
,
);
Hàm gọi onUpdate đang di chuyển cùng một yếu tố ScrollTrigger đang hoạt động và trên cùng một thuộc tính, nếu bạn muốn di chuyển các phần tử theo chiều ngang chỉ cần sử dụng cấu hình trong Tween để di chuyển toàn bộ container và không phải là một hàm gọi onUpdate trên ScrollTrigger, dường như là quá mức nhanh chóng IMHO. Một cái gì đó như thế này:
Hy vọng điều này giúp ích
Chúc các bạn có những trải nghiệm tốt khi sử dụng! #GSAP #React #Animation #CodePen
Nguồn: https://gsap.com/community/forums/topic/42842-element-shivering-issue-on-ios-devices/
Hi,
There are a couple of issues in your demo, first use our useGSAP hook because that simplifies creating and cleaning up animations in React (including Next, Remix, etc). It’s a drop-in replacement for useEffect()
/useLayoutEffect()
. All the GSAP-related objects (animations, ScrollTriggers, etc.) created while the function executes get collected and then reverted when the hook gets torn down.
Here is how it works:
const container = useRef(); // the root level element of your component (for scoping selector text which is optional) useGSAP(() => // gsap code here... , dependencies: (endX), scope: container ); // config object offers maximum flexibility
Or if you prefer, you can use the same method signature as useEffect()
:
useGSAP(() => // gsap code here... , (endX)); // simple dependency Array setup like useEffect()
This pattern follows React’s best practices.
We strongly recommend reading the React guide we’ve put together at https://gsap.com/resources/React/
Using the hook will ensure that the DOM is properly rendered so you don’t have to resort to that timeout you’re using in your code.
But I think that the issue lies here:
gsap.to(elementToMove, x: 0, // Start with no offset ease: 'none', scrollTrigger: trigger: container, start: 'top bottom-=10%', // Start the animation when the top of the container is 5% from the bottom of the viewport end: 'top top-=25%', // End the animation slightly above the top of the viewport scrub: true, ease: 'none', onUpdate: (self) => const progress = self.progress; // Use progress directly (0 to 1) const currentXValue = -progress * xValue; // Calculate the current position based on progress gsap.set(elementToMove, x: currentXValue ); // Apply calculated x position , , );
That onUpdate callback is basically moving the same element ScrollTrigger is animating and on the same property, if you want to move elements horizontally just use the configuration in the Tween to move the entire container and not an onUpdate callback on ScrollTrigger, seems overkill and wasteful IMHO. Something like this:
See the Pen vYodaeo by GreenSock (@GreenSock) on CodePen
Hopefully this helps
Happy Tweening!