在 React 中使用
在 React 中使用 Anime.js 很简单,只需要结合 React 的 useEffect() 和 Anime.js 的 createScope() 方法即可。
下面的示例展示了如何在 React 代码中直接使用 Anime.js 的方法。
React 示例代码
JavaScript + HTML:
import { animate, createScope, createSpring, createDraggable } from 'animejs';import { useEffect, useRef, useState } from 'react';import reactLogo from './assets/react.svg';import './App.css';function App() {const root = useRef(null);const scope = useRef(null);const [ rotations, setRotations ] = useState(0);useEffect(() => {scope.current = createScope({ root }).add(scope => {// 所有在这里创建的 anime.js 实例都会被绑定到 <div ref={root}> 上// 创建一个带有弹性效果的循环动画animate('.logo', {scale: [{ to: 1.25, ease: 'inOut(3)', duration: 200 },{ to: 1, ease: createSpring({ stiffness: 300 }) }],loop: true,loopDelay: 250,});// 让 logo 能够以中心点拖拽createDraggable('.logo', {container: [0, 0, 0, 0],releaseEase: createSpring({ stiffness: 200 })});// 注册一个动画方法供外部调用scope.add('rotateLogo', (i) => {animate('.logo', {rotate: i * 360,ease: 'out(4)',duration: 1500,});});});// 在组件卸载时清理所有 scope 中的 anime.js 实例return () => scope.current.revert()}, []);const handleClick = () => {const i = rotations + 1;setRotations(i);// 点击按钮时调用 scope 中注册的旋转动画方法scope.current.methods.rotateLogo(i);};return (<div ref={root}><div className="large centered row"><img src={reactLogo} className="logo react" alt="React logo" /></div><div className="medium row"><fieldset className="controls"><button onClick={handleClick}>rotations: {rotations}</button></fieldset></div></div>)}export default App;
