reactjs - React JS 在悬停时为 Lottiefile 设置动画
问题描述
我想利用在我正在创建的 ReactJS 应用程序中的某些按钮上使用微交互的优势。
我正在尝试做的事情:
当我将鼠标悬停在 div 中的图标上时,我希望播放动画。这是图标的 Lottie。
编辑图标.jsx
import React, { Component } from 'react'
import Lottie from 'react-lottie'
import animationData from '../animations/edit.json'
export default class EditIcon extends Component {
constructor(props) {
super(props);
this.state = {
isStopped: true,
isPaused: true,
Animated: 0,
};
this.defaultOptions = {
loop: false,
autoplay: false,
animationData: animationData
};
}
onMouseEnter = () => {
this.setState({
isPaused: false,
autoplay: true,
Animated: 0
});
console.log("animate");
};
onMouseLeave = () => {
this.setState({
isPaused: true,
autoplay: false,
Animated: 0
});
console.log("stop");
};
render() {
return (
<div id="ethdrop">
<Lottie
className='animation-class'
options={this.defaultOptions}
isStopped={this.state.isStopped}
isPaused={this.state.isPaused}
onMouseEnter={this.onMouseEnter}
onMouseLeave={this.mouseLeave}
/>
</div>
);
}
}
我在 Stack Blitz 中发现的另一个奇怪之处是 onMouseEnter 函数,它不能按预期在悬停时工作。但是,如果我点击它动画的图标。
https://stackblitz.com/edit/react-zwlm7m
我一直在寻找解决方案,但在 S/O 上没有找到任何解决方案,大多数解决方案都与 Jquery 有关。
解决方案
您可以获得对 Lottie 组件的引用并使用它的方法play
和pause
.
免责声明我从未使用过 react-lottie,但我使用了 lottie-react-native,它看起来非常相似,这就是我触发动画播放/暂停的方式。
export default class EditIcon extends Component {
_lottieHeartRef;
...
onRefLottie = (ref) => {
this._lottieHeartRef = ref;
}
onMouseEnter = () => {
this._lottieHeartRef && this._lottieHeartRef.play();
console.log("animate");
};
onMouseLeave = () => {
this._lottieHeartRef && this._lottieHeartRef.pause();
console.log("stop");
};
render() {
return <div id="ethdrop">
<Lottie
ref={this.onRefLottie}
...
onMouseEnter={this.onMouseEnter}
onMouseLeave={this.onMouseLeave} />
</div>;
}
}
推荐阅读
- google-apps-script - 在整个工作表中查找具有特定值的单元格的功能
- flutter - 更新到 Flutter 1.12.13 后,TextField 提示/输入文本没有居中且没有 prefixIcon
- reactjs - 在反应测验中设置子组件的数组状态并将其传递回父组件时遇到问题
- sql - SQL 问题:重复键值违反唯一约束
- web - 配置 apache2 以使 web2py 特定应用程序响应辅助主机名
- c - 核简单示例中未显示窗口
- python-3.x - 如何从python字典中的键中删除字母
- redis - Redis 快速填满内存,运行 --bigkeys 释放它
- azure - Cosmos DB 分区设计
- regex - 具有可选开头和结尾的 Python 正则表达式