diff --git a/components/PlayerCard/Holoverlay.tsx b/components/PlayerCard/Holoverlay.tsx index 47f84ebb..dbed6364 100644 --- a/components/PlayerCard/Holoverlay.tsx +++ b/components/PlayerCard/Holoverlay.tsx @@ -1,3 +1,7 @@ +'use client' + +import React, { useEffect, useRef } from 'react' + import { cn } from '@/lib/utils' import styles from '@/components/PlayerCard/holo.module.css' @@ -6,14 +10,57 @@ export type HoloEffect = 'dice' | 'lines' | 'wavy' export default function Holoverlay({ effect, className, + scrollControlsAngle = true, }: { effect: HoloEffect className?: string + scrollControlsAngle?: boolean }) { + const overlayRef = useRef(null) + + useEffect(() => { + const el = overlayRef.current + if (!el || !scrollControlsAngle) return + + let ticking = false + const setAngle = () => { + const scrollY = window.scrollY || window.pageYOffset || 0 + const angle = (scrollY * 0.8) % 360 + el.style.setProperty('--angle', `${angle}deg`) + el.style.setProperty('--mouseAngle', `${angle}deg`) + } + + const onScroll = () => { + if (ticking) return + ticking = true + requestAnimationFrame(() => { + setAngle() + ticking = false + }) + } + + const onResize = onScroll + + setAngle() + window.addEventListener('scroll', onScroll, { passive: true }) + window.addEventListener('resize', onResize) + + return () => { + window.removeEventListener('scroll', onScroll) + window.removeEventListener('resize', onResize) + } + }, [scrollControlsAngle]) + return (
) } diff --git a/components/PlayerCard/PlayerCard.tsx b/components/PlayerCard/PlayerCard.tsx index 0e01a29d..8389d244 100644 --- a/components/PlayerCard/PlayerCard.tsx +++ b/components/PlayerCard/PlayerCard.tsx @@ -144,7 +144,7 @@ export default function PlayerCard({ /> {/* Frame Overlay */}