如何在ReactJS中使用ref来触发动画。
如何在ReactJS中使用ref来触发动画。
这是我的演示:https://stackblitz.com/edit/react-pwdkse 注意:请使用您的浏览器控制台而不是Stackblitz的控制台。浏览器控制台在信息反馈方面更加完整。
我希望使用ReactJS的ref
引用来触发动画,而不是在元素范围内更改className。目前没有任何反应。
我可能漏掉了什么吗?
这是我的React代码片段:
组件
import React, { Component } from 'react'; import { render } from 'react-dom'; import './style.module.css'; class App extends Component { constructor() { super(); this.state = { name: 'React' }; this.animateRef = React.createRef(); // this.triggerAnimation = this.triggerAnimation.bind(this); } componentDidMount(){ // 现在是空的范围 } triggerAnimation=()=>{ console.log("触发animateRef动画") // this.animateRef.current.style.animationName="animateElement" // this.animateRef.current.style.animation="1.5s 4.3s 3 alternate forwards" this.animateRef.current.className.concat(`animation_trigger`) console.log("animateRef: ", this.animateRef) } render() { return ( 开始编辑以查看一些神奇的事情 :) 我被渲染了! ); } } render(, document.getElementById('root'));
样式表
h1, p { font-family: Arial; } .animatedElementStyle{ position:absolute; top:61%; left:10%; width:15w; height:25vh; visibility: hidden; opacity:0; } .animation_trigger{ animation: animateElement 1.5s 0.5s 3 alternate forwards; } @keyframes animateElement{ from{ opacity:0; visibility:hidden; } 100%{ transform: translate(15%,0); opacity:1; visibility:visible; color:orange; font-size:3em; } }
感谢任何提示。
问题的原因是在ReactJS中使用ref触发动画时,使用了错误的方法来添加类名。原本的代码使用了className.concat(`animation_trigger`)
来添加类名,但是这个方法并不会改变原始的字符串,而是返回一个与之前字符串连接的新字符串。因此,动画并没有被触发。
解决方法是使用classList.add(`animation_trigger`)
来添加类名。classList是DOM元素的一个属性,它提供了一组方法来操作元素的类名。通过使用add
方法来添加类名,可以正确地触发动画效果。
另外,还需要确保在('animation_trigger}')
中删除多余的}
符号。
这样修改后的代码就能够正确地触发动画了。