javascript - React:处理 OnMouseDown 和 OnMouseUp 之间状态变化的更快方法?
问题描述
我有一个窗口,我只想从顶部栏中拖动,类似于...一个 GUI 窗口。
我有一个基于顶部栏上的 OnMouseDown 和 OnMouseUp 事件的状态更新。但是,更新似乎很慢。它仅在我尝试拖放它时才有效。似乎在奇怪的尝试 OnMouseUp 没有正确更新,或者更新缓慢(打印语句与实际值不同)。当用户单击时,是否有更好的方法来更新此处的状态contentTopBar
?
class GenericWindow extends Component {
constructor(props){
super(props)
this.state = {draggable:true}
}
render(){
return( <motion.div
drag={this.state.draggable}
dragMomentum={false}
>
<div
className="contentTopBar homeBar"
onMouseDown={()=>{this.setState({draggable:true});console.log(`should be TRUE, is: ${this.state.draggable}`)}} // ** mouse down
onMouseUp={()=>{this.setState({draggable:false});console.log(`should be FALSE, is: ${this.state.draggable}`)}} // ** mouse up
>
{this.props.title}
</div>
<div className="ContentWindowContent">
{this.props.children}
</div>
</motion.div>
)
}
}
编辑:注意我使用成帧器运动模块进行拖动,因此是motion.div。
解决方案
我最终以一种迂回的方式完成了这项工作,如果有人能提出更好的建议,我很感兴趣。我添加了一个额外的 state {mouseUp:false}
,并将两个 onMouseUp / onMouseDown 行更改为以下内容:
onMouseEnter={ e=>this.setState({draggable:true, mouseUp:false}) }
onMouseLeave={ e=>this.state.mouseUp && this.setState({draggable:false, mouseUp:false}) }
onMouseDown={e=>this.setState({draggable:true,mouseUp:false})}
onMouseUp={ e=>{this.setState({mouseUp:true})} }
我正在保存 mouseUp 状态,因为有时我的光标拖动速度比顶部栏区域快并且它取消了拖动事件,但我发现这是最强大的
推荐阅读
- java - 尝试使用 @Value 从属性文件设置 @Scheduled 的 cron 属性,但出现编译时错误
- flutter - 如何在颤动的字符串中使用特殊的unicode字符?
- c++ - 在 Windows 中创建 OpenGL 上下文
- symfony - 在不同的频道中发送 symfony ChatMessage
- javascript - 在单箭头(自动返回)功能中添加控制台日志而不添加花括号
- ios - 如何删除一组 GMSMarker?
- powershell - 使用 $PSScriptRoot 从另一个脚本执行 powershell 脚本?
- c++ - 朋友模板专业化
- javascript - 节点 mongodb 将数据存储为字符串而不是对象
- javascript - SyntaxError:bcrypt 模块的意外标识符