Next.jsでスクロール量に応じた要素移動を行おうとしたところ、以下のコードで実装はできたのですが、処理が重すぎるため、何か軽量化する方法はないでしょうか。ご教授よろしくお願いいたします。PCだと普通に動きますが、スマホだと本当にカクカクになってしまいます。
throttleと呼ばれるものも試したのですが、うまく動作させられてないのか、効果はほとんどありませんでした。というか、間引きすぎても飛び飛びの移動になってしまうため、あまり間引けてないというのもあるかもしれません。あと、will-changeは指定してます。
TypeScript
1useEffect(() => { 2 resize() 3 window.onresize = resize; 4 return () => window.removeEventListener("scroll", resize); 5}); 6function resize() { 7 window.removeEventListener("scroll", resize); 8 let boxElm = document.querySelector("#box_") as HTMLElement; 9 let bodyHeight = document.documentElement.scrollHeight; 10 let boxHeight = boxElm.offsetHeight; 11 onscroll(); 12 window.onscroll = onscroll; 13 function onscroll() { 14 let scrollRate = document.documentElement.scrollTop / bodyHeight; 15 let position = -1 * scrollRate * boxHeight; 16 boxElm.style.transform = `translate3d(0, ${position}px, 0)`; 17 } 18}

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。