交互与动画

交互与动画

与 React Spring 协同使用

我们学习了如何创建小的动画,以及如何对用户的互动做出反应,但我们还没有学习如何以创建动画的方式改变这些道具。为此,我们将使用 react-spring,react-spring 是基于弹簧物理学的动画库,它与 React Three Fiber 完美配合,因为它来自同一个维护者,而且它还专门为 React Three Fiber 创建了出口。

import React, { useState } from "react";
import { Canvas, useFrame } from "@react-three/fiber";
import { useSpring, animated, config } from "react-spring/three";
import "./styles.css";

function MyRotatingBox() {
  const myMesh = React.useRef();
  const [active, setActive] = useState(false);

  const { scale } = useSpring({
    scale: active ? 1.5 : 1,
    config: config.wobbly,
  });

  useFrame(({ clock }) => {
    const a = clock.getElapsedTime();
    myMesh.current.rotation.x = a;
  });

  return (
    <animated.mesh
      scale={scale}
      onClick={() => setActive(!active)}
      ref={myMesh}
    >
      <boxBufferGeometry />
      <meshPhongMaterial color="royalblue" />
    </animated.mesh>
  );
}

export default function App() {
  return (
    <div className="App">
      <Canvas>
        <MyRotatingBox />
        <ambientLight intensity={0.1} />
        <directionalLight />
      </Canvas>
    </div>
  );
}
上一页