问题描述
我正在开发一个具有React Flipcard模块功能的应用程序-但是我注意到在某些情况下,如果用户悬停得太快,该翻转卡将不会向后翻转-我试图进入状态-而不是只是isFlipped-但处于翻转状态-因此,如果该项目仍在翻转,则避免了多次触发翻转---但是我也有一个超时时间可以反向切换回前卡,从而使前面板返回。
有没有一种方法可以改善这种活动挂图的质量和流程。
https://codesandbox.io/s/proud-morning-duo0k?file=/src/FlipIconCard.js
import React,{ Component } from 'react';
import ReactCardFlip from 'react-card-flip';
import './FlipIconCard.scss';
class FlipIconCard extends Component {
constructor() {
super();
this.state = {
isFlipped: false
};
this.handletoggle = this.handletoggle.bind(this);
this.resetToFront = this.resetToFront.bind(this);
}
handletoggle(e) {
e.preventDefault();
this.setState(prevstate => ({ isFlipped: !prevstate.isFlipped }));
this.setState({ isFlippping: true });
if(this.state.isFlippping){
setTimeout(
function() {
this.setState({ isFlippping: false });
}
.bind(this),600
);
}
if(!this.state.isFlippping){
this.resetToFront();
}
}
resetToFront() {
let timer = setTimeout(
function() {
if(this.state.isFlipped) {
this.setState({ isFlipped: false });
clearTimeout(this.state.timer);
}
}
.bind(this),4000
);
this.setState({ timer: timer });
}
render() {
return (
<div className="flip-icon-card">
<div className="flip-icon-flipper">
<ReactCardFlip isFlipped={this.state.isFlipped} flipDirection="horizontal">
<div onMouSEOver={this.handletoggle}>
<div className="flip-card-contents"><img className="icon-badge" src={require('../../../img/icons/'+this.props.icon)} alt="" /></div>
</div>
<div onMouseLeave={this.handletoggle}>
<div className="flip-card-contents backcard"><div className="element">{this.props.text}</div></div>
</div>
</ReactCardFlip>
</div>
<div>{this.props.label}</div>
</div>
);
}
}
export default FlipIconCard;
解决方法
有点复杂,您可以定义一个接收标志的函数并相应地设置状态:
setFlipped(flipped) {
this.setState({ isFlipped: flipped });
}
然后在包装器上注册如下事件:
<div
className="flip-icon-flipper"
onMouseLeave={() => this.setFlipped(false)}
onMouseOver={() => this.setFlipped(true)}
>