Events
рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ React Three Fiber рдореЗрдВ рдорд╛рдЙрд╕, рдХреАрдмреЛрд░реНрдб рдФрд░ рдЯрдЪ рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВ рддрд╛рдХрд┐ рд╣рдорд╛рд░реА 3D рд╕реАрди рдХреЛ рдЕрдзрд┐рдХ рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ рдФрд░ рдЗрдорд░реНрд╕рд┐рд╡ рдмрдирд╛ рд╕рдХреЗрдВред
Mouse
Meshes рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЗрд╡реЗрдВрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдорд╛рдЙрд╕ рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдорд╛рдЙрд╕ mesh рдХреЗ рдКрдкрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд╣рдо onPointerEnter
рдФрд░ onPointerLeave
рдЗрд╡реЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЗрдП рдЬрдм рдорд╛рдЙрд╕ рд╣рдорд╛рд░реЗ sphere рдХреЗ рдКрдкрд░ рд╣реЛ рддреЛ рдЗрд╕рдХреЗ рд░рдВрдЧ рдХреЛ рдмрджрд▓реЗрдВред
рд╣рдо рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдПрдХ state рдмрдирд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рдЬрд╛рди рд╕рдХреЗрдВ рдХрд┐ рдорд╛рдЙрд╕ sphere рдХреЗ рдКрдкрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВ:
const [hovered, setHovered] = useState(false);
рдлрд┐рд░ рд╣рдо <mesh />
рдХреЙрдореНрдкреЛрдиреЗрдиреНрдЯ рдкрд░ onPointerEnter
рдФрд░ onPointerLeave
рдЗрд╡реЗрдВрдЯреНрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
<mesh {...props} onPointerEnter={() => setHovered(true)} onPointerLeave={() => setHovered(false)} > {/* ... */} </mesh>
рдЕрдВрдд рдореЗрдВ, рд╣рдо material рдХреЗ рд░рдВрдЧ рдХреЛ hovered
state рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ conditional рд░реВрдк рд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВ:
<meshStandardMaterial color={hovered ? "pink" : "white"} />
рдЕрдм, рдЬрдм рдорд╛рдЙрд╕ рдЗрд╕рдХреЗ рдКрдкрд░ рд╣реЛ рддреЛ sphere рдЧреБрд▓рд╛рдмреА рд░рдВрдЧ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдо рдпрд╣ рднреА рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рдЙрд╕ mesh рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, onClick
рдЗрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред
рд╣рдо рдПрдХ state рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░ рд╕рдХреЗрдВ рдХрд┐ sphere рдЪрдпрдирд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВ:
const [selected, setSelected] = useState(false);
рдлрд┐рд░, рд╣рдо <mesh />
рдХреЙрдореНрдкреЛрдиреЗрдиреНрдЯ рдкрд░ onClick
рдЗрд╡реЗрдВрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
<mesh {...props} onPointerEnter={() => setHovered(true)} onPointerLeave={() => setHovered(false)} onClick={() => setSelected(!selected)} > {/* ... */} </mesh>
рд╣рдо selected
state рдХреЛ рдЙрд╕рдХреЗ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХреЗ рд╡рд┐рдкрд░реАрдд рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рд╣рдо material рдХреЗ рд░рдВрдЧ рдХреЛ active
state рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ conditional рд░реВрдк рд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВ:
let color = hovered ? "pink" : "white"; if (selected) { color = "hotpink"; } return ( <mesh {...props} onPointerEnter={() => setHovered(true)} onPointerLeave={() => setHovered(false)} onClick={() => setSelected(!selected)} > <sphereGeometry args={[0.5, 64, 64]} /> <meshStandardMaterial color={color} /> </mesh> );
рдореИрдВрдиреЗ рд░рдВрдЧ рдХреЗ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рддрд╛рдХрд┐ рджреЛ ternary operators рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдирд╛ рдкрдбрд╝реЗред
рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдмрдмрд▓рд┐рдВрдЧ
рдЖрдЗрдП рд╣рдорд╛рд░реА рддреАрди рдЧреЛрд▓реЗ рдХреЗ рдкреАрдЫреЗ рдПрдХ рдмрдбрд╝рд╛ рдЧреЛрд▓рд╛ рдЬреЛрдбрд╝реЗрдВред
// ... export const Experience = () => { return ( <> <MoveableSphere scale={3} position-z={-10} /> <MoveableSphere /> <MoveableSphere position-x={-2} /> <MoveableSphere position-x={2} /> <ContactShadows rotation-x={Math.PI / 2} position={[0, -1.6, 0]} opacity={0.42} /> <Environment preset="sunset" /> </> ); };
рдпрджрд┐ рд╣рдо рдмреАрдЪ рдХреЗ рдЧреЛрд▓реЗ рдкрд░ рд╣реЛрд╡рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмрдбрд╝реЗ рдЧреЛрд▓реЗ рдкрд░ рднреА onPointerEnter
рдФрд░ onPointerLeave
рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдШрдЯрдирд╛рдПрдВ рдмрдмрд▓рд┐рдВрдЧ рдХрд░ рд░рд╣реА рд╣реЛрддреА рд╣реИрдВред
React Three Fiber рджреНрд╡рд╛рд░рд╛ рдорд╛рдЙрд╕ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд░рдг рдмреАрдЪ рдХреЗ рдЧреЛрд▓реЗ рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░рддреА рд╣реИ рдФрд░ рдлрд┐рд░ рдмрдбрд╝реЗ рдЧреЛрд▓реЗ рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИред
рдШрдЯрдирд╛ рдХреЗ рдмрдмрд▓рд┐рдВрдЧ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдШрдЯрдирд╛ рдкрд░ stopPropagation
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
React Three Fiber: The Ultimate Guide to 3D Web Development
тЬи You have reached the end of the preview тЬи
Go to the next level with Three.js and React Three Fiber!
Get full access to this lesson and the complete course when you enroll:
- ЁЯФУ Full lesson videos with no limits
- ЁЯТ╗ Access to the final source code
- ЁЯОУ Course progress tracking & completion
- ЁЯТм Invite to our private Discord community
One-time payment. Lifetime updates included.