Update padding in Parallax component for improved layout consistency
Some checks failed
Deploy / deploy (push) Has been cancelled
Some checks failed
Deploy / deploy (push) Has been cancelled
This commit is contained in:
@@ -35,24 +35,27 @@ export function ScrollFlow({
|
||||
const reduceMotion = useReducedMotion();
|
||||
const { scrollY } = useScroll();
|
||||
const velocity = useVelocity(scrollY);
|
||||
// Ham hız titrek olur; yay ile yumuşatınca bükülme salınıp yerine oturur
|
||||
const smoothVelocity = useSpring(velocity, {
|
||||
damping: 50,
|
||||
stiffness: 420,
|
||||
mass: 0.6,
|
||||
|
||||
// Önce hızı kesintisiz bir hedef açıya dönüştür, sonra doğrudan görünen
|
||||
// açıyı yumuşat. Böylece eşik/clamp kaynaklı ani hız değişimleri yaya girmez.
|
||||
const targetSkew = useTransform(velocity, (v) => {
|
||||
const RESPONSE = 1800;
|
||||
return Math.tanh(v / RESPONSE) * maxSkew;
|
||||
});
|
||||
// Ölü bölge: yavaş/ufak kaydırmalarda bükülme tamamen 0 kalır — transform
|
||||
// hiç değişmediği için compositor'a kare başı iş çıkmaz. Eşik üstünde
|
||||
// kareyle (ease-in) yükselir, 0,01°'lik adımlara yuvarlanır ki yayın
|
||||
// mikro-salınımları her karede katmanı kirletmesin.
|
||||
const skewY = useTransform(smoothVelocity, (v) => {
|
||||
const DEADZONE = 500; // px/sn — bunun altı "normal gezinme" sayılır
|
||||
const FULL = 2600; // px/sn — bu hızda maxSkew'e ulaşılır
|
||||
const mag = Math.abs(v);
|
||||
if (mag < DEADZONE) return 0;
|
||||
const t = Math.min(1, (mag - DEADZONE) / (FULL - DEADZONE));
|
||||
const s = t * t * maxSkew * Math.sign(v);
|
||||
return Math.round(s * 100) / 100;
|
||||
const smoothSkew = useSpring(targetSkew, {
|
||||
stiffness: 240,
|
||||
damping: 26,
|
||||
mass: 0.7,
|
||||
restDelta: 0.005,
|
||||
restSpeed: 0.01,
|
||||
});
|
||||
|
||||
// Yuvarlama görsel basamaklanma üretir. Tam hassasiyetle çiz; yalnızca açı
|
||||
// algılanamayacak kadar küçüldüğünde transform'u kaldırarak dev sayfa
|
||||
// katmanının GPU belleğinde boşuna tutulmasını önle.
|
||||
const transform = useTransform(smoothSkew, (v) => {
|
||||
if (Math.abs(v) < 0.01) return "none";
|
||||
return `skewY(${v}deg)`;
|
||||
});
|
||||
|
||||
if (reduceMotion) {
|
||||
@@ -61,12 +64,7 @@ export function ScrollFlow({
|
||||
|
||||
return (
|
||||
<ReactLenis root options={{ lerp: 0.09, anchors: true }}>
|
||||
{/* willChange: bükülme 0'a döndüğünde dev katman GPU'dan düşüp
|
||||
bir sonraki tekerlekte yeniden rasterize edilmesin */}
|
||||
<motion.div
|
||||
className={className}
|
||||
style={{ skewY, willChange: "transform" }}
|
||||
>
|
||||
<motion.div className={className} style={{ transform }}>
|
||||
{children}
|
||||
</motion.div>
|
||||
</ReactLenis>
|
||||
|
||||
Reference in New Issue
Block a user