如何将背景 JS 动画集成到我的 React 应用程序中?

IT技术 javascript reactjs css-animations react-animations
2021-05-26 12:50:14

我正在尝试将萤火虫动画添加到 react 中的组件中(我尝试使用的代码在这里https://codepen.io/celli/pen/xZgpvN)。如果我有一个简单的 HTML / CSS / Javascript 设置,我会知道该怎么做,但我对如何在 React 上下文和单个组件范围内集成此动画感到困惑。我把下面的代码放在哪里?如何在组件中引用它?


var total=40,
    container=document.getElementById('container'),
    w=window.innerWidth,
    h=window.innerHeight,
    Tweens=[],
    SPs=1;



for (var i=total;i--;){ 
    var Div=document.createElement('div');
    TweenLite.set(Div,{attr:{class:'dot'},x:R(w),y:R(h),opacity:0});
    container.appendChild(Div); Anim(Div);  Tweens.push(Div);
};

function Anim(elm){ 
    elm.Tween=TweenLite.to(elm,R(20)+10,{bezier:{values:[{x:R(w),y:R(h)},{x:R(w),y:R(h)}]},opacity:R(1),scale:R(1)+0.5,delay:R(2),onComplete:Anim,onCompleteParams:[elm]})
};

for(var i=total;i--;){
  Tweens[i].Tween.play()};


function R(max){return Math.random()*max};

其次,我在哪里放置下面的CSS代码?

body{
  background-color: #222222;
  overflow:hidden;
}

.dot{
  width:4px;
  height:4px;
  position:absolute;
  background-color:#ff00cc;
  box-shadow:0px 0px 10px 2px #ff00cc;
  border-radius: 20px;
  z-index:2;
}

#container {
width:100%; 
height:100%;
}
1个回答

React 关于与其他库集成的页面可能是最好的起点。

首先,这是一个可以直接在 StackOverflow 上运行的示例。

现在解释。

一个快速的旁注:前面提到的与其他库的集成页面现在使用类组件,但我喜欢使用功能组件,因为钩子是 ₜₕₑ fᵤₜᵤᵣₑ。我还将一些代码从旧的 es5 转换为新的现代 es6,因为现代 js 是 ₜₕₑ fᵤₜᵤᵣₑ。

基本思想是,当你的组件第一次被挂载时,你在一个useLayoutEffect钩子内运行所有的初始设置这基本上归结为将您当前的大部分 js 扔到该钩子中。

组件唯一需要渲染的是包含所有点的 div。

这里的优点是使用 react,您可以使用 props 控制动画的各个方面——在示例中通过允许将total变量作为 prop 传递来演示

此外,由于 React 提供了一种通过useRef钩子获取对 dom 节点的引用的方法,因此您可以使用它代替document.querySelector('#contanier').

我把 CSS 放在哪里

最佳位置实际上取决于您如何设置 React 应用程序。

如果您在某处有一个 HTML 模板,您可以像在任何其他项目中一样在其中放置一个样式标签或一个链接标签。

如果您使用了 create-react-app 或有类似的设置,那么您可以通过导入样式表、使用css module或修改src/index.css.

另一种选择是使用 css-in-js 解决方案,例如emotionstyled-components但这些可能需要一点时间来适应。