@@ -41,16 +41,31 @@ export default function Hero({ className = '' }: HeroProps) {
4141 const setupAnimations = useCallback ( ( ) => {
4242 if ( ! heroRef . current ) return ;
4343
44- const ellipseImg = heroRef . current . querySelector ( '.ellipse-image' ) ;
44+ const ellipseImg = heroRef . current . querySelectorAll ( '.ellipse-image' ) ;
4545 const sphereImg = heroRef . current . querySelector ( '.sphere-image' ) ;
4646
4747 if ( ellipseImg ) {
48- gsap . to ( ellipseImg , {
49- ...animationConfig . ellipse ,
50- willChange : 'transform' ,
51- force3D : true ,
52- immediateRender : false ,
53- lazy : true ,
48+ ellipseImg . forEach ( ( img , i ) => {
49+ // Common scale animation
50+ gsap . to ( img , {
51+ ...animationConfig . ellipse ,
52+ willChange : 'transform' ,
53+ force3D : true ,
54+ immediateRender : false ,
55+ lazy : true ,
56+ } ) ;
57+
58+ // Rotation animation per ellipse
59+ const direction = i === 0 || i === 1 ? 2 : - 1 ;
60+ gsap . to ( img , {
61+ rotation : direction * 360 ,
62+ ease : 'none' ,
63+ duration : 60 ,
64+ repeat : - 1 ,
65+ transformOrigin : '50% 50%' ,
66+ force3D : true ,
67+ willChange : 'transform' ,
68+ } ) ;
5469 } ) ;
5570 }
5671
@@ -75,7 +90,29 @@ export default function Hero({ className = '' }: HeroProps) {
7590 } ,
7691 { scope : heroRef , dependencies : [ setupAnimations ] }
7792 ) ;
78-
93+ const ellipses = [
94+ {
95+ src : '/elipse1.svg' ,
96+ width : 'w-[50%]' ,
97+ z : 'z-10' ,
98+ opacity : '' ,
99+ sizes : '50vw' ,
100+ } ,
101+ {
102+ src : '/elipse2.svg' ,
103+ width : 'w-[65%]' ,
104+ z : 'z-10' ,
105+ opacity : '' ,
106+ sizes : '90vw' ,
107+ } ,
108+ {
109+ src : '/elipse3.svg' ,
110+ width : 'w-[80%]' ,
111+ z : 'z-10' ,
112+ opacity : '' ,
113+ sizes : '100vw' ,
114+ } ,
115+ ] ;
79116 return (
80117 < header
81118 className = { `relative mx-5 flex h-screen min-h-screen items-stretch justify-between pb-9 md:items-end md:pb-[66px] ${ className } ` }
@@ -99,20 +136,19 @@ export default function Hero({ className = '' }: HeroProps) {
99136 quality={85}
100137 sizes='100vw'
101138 /> */ }
102- { [ 1 , 2 , 3 ] . map ( elipse => (
139+ { ellipses . map ( ( ellipse , i ) => (
103140 < Image
104- key = { `elipse ${ elipse } ` }
105- src = { `/elipse ${ elipse } .svg` }
141+ key = { i }
142+ src = { ellipse . src }
106143 alt = ''
107- className = { `ellipse-image absolute top-1/2 left-1/2 z-10 h-[90%] ${ elipse === 1 ? 'w-[70%]' : elipse === 2 ? 'w-[90%]' : 'w-[1500px]' } - translate-x-1/2 -translate-y-1/2` }
144+ className = { `ellipse-image absolute top-1/2 left-1/2 - translate-x-1/2 -translate-y-1/2 ${ ellipse . width } ${ ellipse . z } ${ ellipse . opacity } ` }
108145 width = { 1920 }
109146 height = { 1080 }
110147 priority
111148 quality = { 85 }
112- sizes = '90vw'
149+ sizes = { ellipse . sizes }
113150 />
114151 ) ) }
115-
116152 < div
117153 className = 'absolute bottom-0 left-0 z-10 h-[150px] w-screen max-w-screen bg-gradient-to-t from-transparent'
118154 style = { {
0 commit comments