feat: lock scroll at hero 100% — prevent scrolling past hero

This commit is contained in:
2026-07-30 13:10:20 +03:00
parent 24bbac5d65
commit b02bbba47c
+17 -12
View File
@@ -103,27 +103,32 @@ export default function CloudRevealSection() {
useMotionValueEvent(scrollYProgress, 'change', (progress) => { useMotionValueEvent(scrollYProgress, 'change', (progress) => {
if (!loaded) return if (!loaded) return
// Frame güncelle
const frameIndex = Math.min(Math.floor(progress * (TOTAL_FRAMES - 1)), TOTAL_FRAMES - 1) const frameIndex = Math.min(Math.floor(progress * (TOTAL_FRAMES - 1)), TOTAL_FRAMES - 1)
if (frameIndex !== currentFrameRef.current) { if (frameIndex !== currentFrameRef.current) {
currentFrameRef.current = frameIndex currentFrameRef.current = frameIndex
drawFrame(frameIndex) drawFrame(frameIndex)
} }
})
// %100'de bir sonraki bölüme snap et // %100'de aşağı scroll'u kilitle
if (progress >= 0.99 && !hasSnapped.current) { useEffect(() => {
hasSnapped.current = true const onWheel = (e: WheelEvent) => {
const next = document.getElementById('proje') if (scrollYProgress.get() >= 0.99 && e.deltaY > 0) {
if (next) { e.preventDefault()
next.scrollIntoView({ behavior: 'smooth' })
} }
} }
// Geri scroll yapılırsa snap'i sıfırla const onTouchMove = (e: TouchEvent) => {
if (progress < 0.9) { if (scrollYProgress.get() >= 0.99) {
hasSnapped.current = false e.preventDefault()
}
} }
}) window.addEventListener('wheel', onWheel, { passive: false })
window.addEventListener('touchmove', onTouchMove, { passive: false })
return () => {
window.removeEventListener('wheel', onWheel)
window.removeEventListener('touchmove', onTouchMove)
}
}, [scrollYProgress])
useEffect(() => { useEffect(() => {
const canvas = canvasRef.current const canvas = canvasRef.current