next-enterprise/app/about/page.tsx

54 lines
1.5 KiB
TypeScript
Raw Normal View History

2024-04-08 05:28:26 +00:00
"use client"
import React, { useRef, useEffect, useState } from "react"
2024-04-04 04:40:20 +00:00
const MouseTrackingGlowEffect: React.FC = () => {
2024-04-08 05:28:26 +00:00
const [position, setPosition] = useState({ x: 0, y: 0 })
const [isHovered, setIsHovered] = useState(false)
const containerRef = useRef<HTMLDivElement>(null)
2024-04-04 04:40:20 +00:00
useEffect(() => {
const handleMouseMove = (event: MouseEvent) => {
2024-04-08 05:28:26 +00:00
setPosition({ x: event.clientX, y: event.clientY })
}
2024-04-04 04:40:20 +00:00
const handleMouseEnter = () => {
2024-04-08 05:28:26 +00:00
setIsHovered(true)
}
2024-04-04 04:40:20 +00:00
const handleMouseLeave = () => {
2024-04-08 05:28:26 +00:00
setIsHovered(false)
}
2024-04-04 04:40:20 +00:00
2024-04-08 05:28:26 +00:00
const container = containerRef.current
2024-04-04 04:40:20 +00:00
if (container) {
2024-04-08 05:28:26 +00:00
container.addEventListener("mousemove", handleMouseMove)
container.addEventListener("mouseenter", handleMouseEnter)
container.addEventListener("mouseleave", handleMouseLeave)
2024-04-04 04:40:20 +00:00
}
return () => {
if (container) {
2024-04-08 05:28:26 +00:00
container.removeEventListener("mousemove", handleMouseMove)
container.removeEventListener("mouseenter", handleMouseEnter)
container.removeEventListener("mouseleave", handleMouseLeave)
2024-04-04 04:40:20 +00:00
}
2024-04-08 05:28:26 +00:00
}
}, [])
2024-04-04 04:40:20 +00:00
return (
2024-04-08 05:28:26 +00:00
<div ref={containerRef} className="relative h-screen w-screen overflow-hidden">
2024-04-04 04:40:20 +00:00
<div
2024-04-08 05:28:26 +00:00
className={`absolute left-0 top-0 h-64 w-64 rounded-full bg-blue-500 filter ${
2024-04-04 04:40:20 +00:00
isHovered ? "blur-xl" : "blur-none"
}`}
style={{
transform: `translate(${position.x - 32}px, ${position.y - 32}px)`,
}}
></div>
</div>
2024-04-08 05:28:26 +00:00
)
}
2024-04-04 04:40:20 +00:00
2024-04-08 05:28:26 +00:00
export default MouseTrackingGlowEffect