@@ -35,6 +35,19 @@ export function HeroReveal({
3535 let last = performance . now ( ) ;
3636 let inView = true ;
3737 let running = false ;
38+ const reducedMotion = window . matchMedia (
39+ "(prefers-reduced-motion: reduce)" ,
40+ ) . matches ;
41+ let hostRect = host . getBoundingClientRect ( ) ;
42+
43+ const updateHostRect = ( ) => {
44+ hostRect = host . getBoundingClientRect ( ) ;
45+ } ;
46+
47+ const resizeObserver = new ResizeObserver ( updateHostRect ) ;
48+ resizeObserver . observe ( host ) ;
49+ window . addEventListener ( "resize" , updateHostRect ) ;
50+ window . addEventListener ( "scroll" , updateHostRect , { passive : true } ) ;
3851
3952 const onMove = ( event : PointerEvent ) => {
4053 if ( event . isTrusted ) userActive = true ;
@@ -58,20 +71,19 @@ export function HeroReveal({
5871 0.5 + 0.34 * Math . sin ( t * 0.37 ) + 0.14 * Math . sin ( t * 0.93 + 1.7 ) ;
5972 const ny =
6073 0.5 + 0.3 * Math . sin ( t * 0.53 + 0.8 ) + 0.14 * Math . sin ( t * 1.19 + 4.1 ) ;
61- const rect = host . getBoundingClientRect ( ) ;
6274 target . dispatchEvent (
6375 new PointerEvent ( "pointermove" , {
6476 bubbles : true ,
65- clientX : rect . left + rect . width * nx ,
66- clientY : rect . top + rect . height * ny ,
77+ clientX : hostRect . left + hostRect . width * nx ,
78+ clientY : hostRect . top + hostRect . height * ny ,
6779 } ) ,
6880 ) ;
6981 }
7082 raf = requestAnimationFrame ( tick ) ;
7183 } ;
7284
7385 const start = ( ) => {
74- if ( running || ! inView || document . hidden ) return ;
86+ if ( reducedMotion || running || ! inView || document . hidden ) return ;
7587 running = true ;
7688 last = performance . now ( ) ;
7789 raf = requestAnimationFrame ( tick ) ;
@@ -107,7 +119,10 @@ export function HeroReveal({
107119 return ( ) => {
108120 stop ( ) ;
109121 observer . disconnect ( ) ;
122+ resizeObserver . disconnect ( ) ;
110123 document . removeEventListener ( "visibilitychange" , onVisibilityChange ) ;
124+ window . removeEventListener ( "resize" , updateHostRect ) ;
125+ window . removeEventListener ( "scroll" , updateHostRect ) ;
111126 host . removeEventListener ( "pointermove" , onMove , true ) ;
112127 host . removeEventListener ( "pointerleave" , onLeave , true ) ;
113128 } ;
0 commit comments