Fundamentals
Core
Master
Shaders
Scroll
No HTML a rolagem da página é controlada pelo navegador com base no conteúdo da página. No Three.js e no React Three Fiber, o Canvas é na maioria das vezes fixo ocupando a tela inteira.
Isso significa que, por padrão, a rolagem da página não tem nenhum efeito na cena 3D.
Para remediar isso, precisamos ouvir o evento de rolagem e atualizar nossa cena 3D de acordo.
Isso é exatamente o que o ScrollControls do Drei faz perfeitamente.
ScrollControls
<ScrollControls/>
cria um container de rolagem HTML na frente do canvas. Seu tamanho é baseado na propriedade pages.
Uma página equivale à altura da tela (100vh).
Vamos envolver nossa cena 3D no <Canvas/>
com <ScrollControls/>
:
import { ScrollControls } from "@react-three/drei"; // ... function App() { return ( <> <Canvas camera={{ position: [0, 4, 12], fov: 30 }}> <ScrollControls pages={5}> <Experience /> </ScrollControls> </Canvas> </> ); } export default App;
Agora temos um container rolável na frente da nossa cena 3D, mas nada acontece quando rolamos ainda.
Vamos descobrir duas maneiras de atualizar a cena com base na posição da rolagem.
Componente Scroll
A primeira maneira de fazer elementos seguirem o scroll é usar o componente <Scroll/>
.
É um componente wrapper que atualiza a posição de seus filhos com base na posição do scroll.
Vamos adicioná-lo para envolver nosso mapa foodItems
em Experience.jsx
:
import { Scroll } from "@react-three/drei"; // ... export const Experience = () => { return ( <> {/* ... */} <Scroll> {foodItems.map((foodItem, idx) => ( <FoodItem key={idx} {...foodItem} /> ))} </Scroll> </> ); }; // ...
Agora a posição dos itens de comida é atualizada com base na posição do scroll, mas queremos um item por página. (Começando pelo segundo, já que o primeiro será uma introdução)
End of lesson preview
To get access to the entire lesson, you need to purchase the course.