@@ -5,30 +5,51 @@ import '../css/Cursor.css';
5
5
const CustomCursor = ( ) => {
6
6
const mainCursor = useRef ( null ) ;
7
7
const trailingCircles = useRef ( [ ] ) ;
8
+ const [ isCursorVisible , setIsCursorVisible ] = useState ( true ) ;
8
9
9
10
useEffect ( ( ) => {
10
11
const onMouseMove = ( e ) => {
11
- mainCursor . current . style . transform = `translate(${ e . clientX } px, ${ e . clientY } px)` ;
12
+ if ( isCursorVisible ) {
13
+ mainCursor . current . style . transform = `translate(${ e . clientX } px, ${ e . clientY } px)` ;
12
14
13
- trailingCircles . current . forEach ( ( circle , index ) => {
14
- setTimeout ( ( ) => {
15
- circle . style . transform = `translate(${ e . clientX } px, ${ e . clientY } px) scale(${ 1 - index * 0.1 } )` ;
16
- } , index * 20 ) ;
17
- } ) ;
15
+ trailingCircles . current . forEach ( ( circle , index ) => {
16
+ setTimeout ( ( ) => {
17
+ circle . style . transform = `translate(${ e . clientX } px, ${ e . clientY } px) scale(${ 1 - index * 0.1 } )` ;
18
+ } , index * 20 ) ;
19
+ } ) ;
20
+ }
18
21
} ;
19
22
20
- window . addEventListener ( "mousemove" , onMouseMove ) ;
21
- return ( ) => window . removeEventListener ( "mousemove" , onMouseMove ) ;
22
- } , [ ] ) ;
23
+ const handleMouseLeave = ( ) => {
24
+ setIsCursorVisible ( false ) ;
25
+ } ;
26
+
27
+ const handleMouseEnter = ( ) => {
28
+ setIsCursorVisible ( true ) ;
29
+ } ;
30
+
31
+ document . addEventListener ( "mousemove" , onMouseMove ) ;
32
+ document . addEventListener ( "mouseleave" , handleMouseLeave ) ;
33
+ document . addEventListener ( "mouseenter" , handleMouseEnter ) ;
34
+
35
+ return ( ) => {
36
+ document . removeEventListener ( "mousemove" , onMouseMove ) ;
37
+ document . removeEventListener ( "mouseleave" , handleMouseLeave ) ;
38
+ document . removeEventListener ( "mouseenter" , handleMouseEnter ) ;
39
+ } ;
40
+ } , [ isCursorVisible ] ) ;
23
41
24
42
return (
25
43
< >
26
- < div ref = { mainCursor } className = "main-cursor" > </ div >
44
+ < div
45
+ ref = { mainCursor }
46
+ className = { `main-cursor ${ ! isCursorVisible ? "hidden" : "" } ` }
47
+ > </ div >
27
48
{ [ ...Array ( 8 ) ] . map ( ( _ , i ) => (
28
49
< div
29
50
key = { i }
30
51
ref = { ( el ) => ( trailingCircles . current [ i ] = el ) }
31
- className = " trailing-circle"
52
+ className = { ` trailing-circle ${ ! isCursorVisible ? "hidden" : "" } ` }
32
53
> </ div >
33
54
) ) }
34
55
</ >
0 commit comments