@@ -3,6 +3,8 @@ import type { CSSProperties } from 'react';
3
3
4
4
import { useRef } from 'react' ;
5
5
6
+ import { cn } from '@/docs/src/utils' ;
7
+
6
8
import { useEventListener } from '../useEventListener/useEventListener' ;
7
9
import { usePointerLock } from './usePointerLock' ;
8
10
@@ -11,31 +13,30 @@ const getSideStyles = (index: number) => ({
11
13
transform : "rotateY(calc(90deg * var(--i))) translateZ(50px)"
12
14
} as CSSProperties )
13
15
const getBaseStyles = ( index : number ) => ( { "--i" : index , transform : "rotateX(calc(90deg * var(--i))) translateZ(50px)" } as CSSProperties )
14
- const face = 'absolute top-0 left-0 w-full h-full border-1 border-solid border-black backface-hidden bg-cyan-500 opacity-50 '
16
+ const face = 'absolute top-0 left-0 w-full h-full border-1 border-solid border-black backface-hidden bg-cyan-300 '
15
17
16
18
17
19
const Demo = ( ) => {
18
20
const { element, unlock, lock } = usePointerLock ( ) ;
19
- const positionRef = useRef ( { x : 0 , y : 0 } ) ;
21
+ const positionRef = useRef ( { x : 0 , y : - 45 } ) ;
20
22
21
23
useEventListener ( 'mousemove' , ( event ) => {
22
- positionRef . current = { x : positionRef . current . x + event . movementX , y : positionRef . current . y + event . movementY } ;
23
24
if ( ! element ) return
24
25
const cube = element as HTMLElement ;
25
- const x = positionRef . current . y + event . movementY / 2
26
- const y = positionRef . current . x + event . movementX / 2
27
- cube . style . transform = `rotateY(calc(${ y } * 1deg)) rotateX(calc(${ x } * 1deg))`
26
+ positionRef . current . x -= event . movementY / 2
27
+ positionRef . current . y += event . movementX / 2
28
+ cube . style . transform = `rotateY(calc(${ positionRef . current . y } * 1deg)) rotateX(calc(${ positionRef . current . x } * 1deg))`
28
29
} , { passive : true } )
29
30
30
31
return (
31
- < div className = 'flex justify-center items-center perspective-normal h-32' >
32
- < div className = 'cursor-all-scroll relative w-[100px] h-[100px] transform-3d' onMouseDownCapture = { lock } onMouseUpCapture = { unlock } >
33
- < span className = { face } style = { getBaseStyles ( 1 ) } />
34
- < span className = { face } style = { getBaseStyles ( - 1 ) } />
35
- < span className = { face } style = { getSideStyles ( 0 ) } / >
36
- < span className = { face } style = { getSideStyles ( 1 ) } />
37
- < span className = { face } style = { getSideStyles ( 2 ) } />
38
- < span className = { face } style = { getSideStyles ( 3 ) } />
32
+ < div className = 'flex justify-center items-center perspective-normal h-32' >
33
+ < div className = 'cursor-all-scroll relative w-[100px] h-[100px] transform-3d' style = { { transform : `rotateY(calc(-45 * 1deg))` } } onMouseDownCapture = { lock } onMouseUpCapture = { unlock } >
34
+ < div className = { face } style = { getBaseStyles ( 1 ) } />
35
+ < div className = { face } style = { getBaseStyles ( - 1 ) } />
36
+ < div className = { cn ( face , 'text-lg text-gray-700 items-center flex justify-center' ) } style = { getSideStyles ( 0 ) } > move me </ div >
37
+ < div className = { face } style = { getSideStyles ( 1 ) } />
38
+ < div className = { face } style = { getSideStyles ( 2 ) } />
39
+ < div className = { face } style = { getSideStyles ( 3 ) } />
39
40
</ div >
40
41
</ div >
41
42
)
0 commit comments