import React, { useEffect } from 'react';
import gsap from 'gsap';
export default function MagniteMouse({ children }) {
useEffect(() => {
const target = document.querySelector('.flowvatar-wrapper');
const eyes = document.querySelectorAll('.flowvatar-eye');
const mouth = document.querySelector('.flowvatar-mouth');
if (!target || !eyes || !mouth) return;
let boundingRect = target.getBoundingClientRect();
const resizeHandler = () => {
boundingRect = target.getBoundingClientRect();
};
const mouseMoveHandler = (e) => {
const mousePosX = e.x - boundingRect.left;
const mousePosY = e.y - boundingRect.top;
gsap.to(target, {
x: (mousePosX - boundingRect.width / 2) * 0.1,
y: (mousePosY - boundingRect.height / 2) * 0.1,
duration: 0.8,
ease: 'power3.out',
});
eyes.forEach((eye) => {
gsap.to(eye, {
x: (mousePosX - boundingRect.width / 2) * 0.1,
y: (mousePosY - boundingRect.height / 2) * 0.1,
duration: 0.8,
ease: 'power3.out',
});
});
gsap.to(mouth, {
x: (mousePosX - boundingRect.width / 2) * 0.1,
y: (mousePosY - boundingRect.height / 2) * 0.1,
duration: 0.8,
ease: 'power3.out',
});
};
const mouseLeaveHandler = () => {
gsap.to(target, {
x: 0,
y: 0,
duration: 0.8,
ease: 'elastic.out(1,0.3)',
});
eyes.forEach((eye) => {
gsap.to(eye, {
x: 0,
y: 0,
duration: 0.8,
ease: 'elastic.out(1,0.3)',
});
});
gsap.to(mouth, {
x: 0,
y: 0,
duration: 2,
ease: 'elastic.out(1,0.3)',
});
};
gsap.to(".flowvatar-eye", {
duration: 10,
rotation: 360,
repeat: -1,
ease: "none"
});
gsap.to('.flowvatar-mouth', {
duration : 3,
scale : (1.3, 0.4),
repeat : -1,
ease: 'none',
yoyo : true,
delay : 3,
})
window.addEventListener('resize', resizeHandler);
window.addEventListener('mousemove', mouseMoveHandler);
window.addEventListener('mouseleave', mouseLeaveHandler);
return () => {
window.removeEventListener('resize', resizeHandler);
window.removeEventListener('mousemove', mouseMoveHandler);
window.removeEventListener('mouseleave', mouseLeaveHandler);
};
}, []);
return
{children}
;
}