是否可以捕获网格项的单击并取消拖动事件?我想在单击网格项时打开模态窗口,但我无法弄清楚如何实现它。我正在使用onClick
捕获点击,但stopPropagation
和preventDefault
不会阻止开始拖动过程的mousedown事件。
答案 0 :(得分:2)
这可以通过将onMouseDown传递给子div元素来完成。
<RGL ... >
<div> // If you add onMouseDown here react-draggable will override it. You will have to use nested element to capture clicks
<div onMouseDown={ e => e.stopPropagation() }>
...
</div>
<div>
</RGL>
答案 1 :(得分:0)
通过使用movementx
和movementy
来查看是否存在实际的真实移动,我设法获得了可行的解决方案。
private onDrag = (
_layout: Layout[],
oldItem: Layout,
_newItem: Layout,
_placeholder: Layout,
e: MouseEvent,
_element: HTMLElement) => {
if (e.movementX !== 0 || e.movementY !== 0) {
this.props.onWidgetDragStart(oldItem.i);
} };
onWidgetDragStart
会触发一个设置变量的事件(redux reducer:)
{
\[actionConstants.DASHBOARD.WIDGET_DRAGGING_STARTED\]: (
state: DraftObject<DashboardsState>,
action: Action<string>,
) => {
state.isWidgetDragging = true;
state.indexOfCurrentDraggedItem = action.payload;
}
}
然后单击事件如下所示:
private onTitleClicked = (e: React.MouseEvent<HTMLDivElement>) => {
if (this.props.indexOfCurrentDraggedItem === this.props.options.id) {
e.preventDefault();
this.props.updatingIndexOfCurrentDraggedItem();
return;
}
if (!this.props.isWidgetDragging && !this.state.editMode) {
this.setState({
editMode: true,
});
}
{
\[actionConstants.DASHBOARD.WIDGET_DRAGGING_STARTED\]: (
state: DraftObject<DashboardsState>,
action: Action<string>,
) => {
state.isWidgetDragging = true;
state.indexOfCurrentDraggedItem = action.payload;
},
};
其中updatingIndexOfCurrentDraggedItem
操作将indexOfCurrentDraggedItem
设置为null
并将indexOfCurrentDraggedItem
作为道具注入到我的小部件组件中。