【发布时间】:2019-01-07 22:04:03
【问题描述】:
我有一个 react-draggable 组件,我希望它的行为类似于 assistive touch
我想在让动画工作之前,我只需要在用户放开拖动时将 x 位置设置为窗口的最左边或最右边,我尝试了以下操作:
import Draggable, { ControlPosition } from 'react-draggable'; // The default
import * as React from 'react';
import './style.less'
export default class FloatingScreenSpace extends React.Component<{}, {position:ControlPosition}> {
state ={
position: {x:90,y:0}
}
draggable: React.RefObject<Draggable> = React.createRef();
onDragEnd = (e:MouseEvent)=>{
if(this.draggable.current){
this.setState({
position:{
x: 0,
y: e.clientY
}
})
}
}
public render() {
return <Draggable position={this.state.position} ref={this.draggable} onStop={this.onDragEnd}>
<div className="floatingActionButton" style={{ width: '100px', height: '100px' }}></div>
</Draggable>
}
}
我认为在 setState 函数中将 x 位置设置为 0 会将其设置为屏幕的最左侧,但是这并没有发生。事实上,它似乎根本没有影响。
理想情况下,当用户放手时,我希望将按钮动画到屏幕最近的边缘(上、下、左、右)。
【问题讨论】:
-
它是否在无条件下工作
if(this.draggable.current)? -
@xadm 拖动工作正常,我只是不知道如何在停止拖动后使其动画到屏幕边缘
-
我很确定拖动是有效的 -
onDragEnd会发生什么 - 有什么反应吗? setState 被执行了吗? -
@tweetypi 你能检查一下我的实现吗?另外,如果您有任何问题,请随时提出。
-
@JordanEnev 我试过了,看起来它可以工作,但没有动画到屏幕边缘,而是捕捉它
标签: reactjs drag-and-drop