GWT DragStartEvent vs MouseDownEvent
我使用普通的遗留GWT DnD而不是GWT DnD库(因为我不需要DnD小部件,只需要普通数据,所以我希望保持简单)。GWT DragStartEvent vs MouseDownEvent,gwt,drag-and-drop,Gwt,Drag And Drop,我使用普通的遗留GWT DnD而不是GWT DnD库(因为我不需要DnD小部件,只需要普通数据,所以我希望保持简单)。 我可以使用源代码的图像小部件来实现它。 然后我切换到HTML小部件,但拖动不起作用:没有错误,没有什么,只是拖动不再拖动。 代码(问题在拖动部分,我只在下面列出代码的这一部分): 怎么了? 看起来没有DragStartEvent,因为在我单击拖动并移动鼠标以放置目标后,浏览器会选择介于两者之间的内容(拖动开始以放置目标) 为了便于调查,我添加了一个MouseDownHandle
我可以使用源代码的图像小部件来实现它。
然后我切换到HTML小部件,但拖动不起作用:没有错误,没有什么,只是拖动不再拖动。
代码(问题在拖动部分,我只在下面列出代码的这一部分): 怎么了?
看起来没有DragStartEvent,因为在我单击拖动并移动鼠标以放置目标后,浏览器会选择介于两者之间的内容(拖动开始以放置目标) 为了便于调查,我添加了一个MouseDownHandler,实际上是一个MouseDownEvent
所以问题是:如何控制GWT将在DragStartEvent和MouseDownEvent之间触发哪个事件?假设您的最终目标是使用本机的
GWT
拖放支持(映射HTML5API
)拖放HTML
小部件,那么您就缺少了一些让事情正常工作的部分。你必须:
- 使元素可拖动(在代码中看不到):
- 向元素添加一个
,并设置要传输的数据(如您所做的):DragStartHandler
- 将
添加到元素目标,该目标将是要放置到的元素:DragOverHandler
targetWidget.addDragOverHandler(new DragOverHandler() { public void onDragOver(DragOverEvent event) { // Some kind of effect, if you like. } });
- 向同一元素目标添加
,阻止默认浏览器操作,并检索数据:DropHandler
targetWidget.addDropHandler(new DropHandler() { public void onDrop(DropEvent event) { event.PreventDefault(); String data = event.getData("data"); } });
preventDefault()
DragStartEvent?@andrea boscolo:到目前为止,我在Firefox和chrome上进行了测试(可能相同:两者都包括webkit)。我想阻止老鼠下山。我不明白你的建议:我怎样才能阻止鼠标下移——假设我能得到DragStart--Tx@andrea-我添加了event.preventDefault();给我的鼠标管理员。它不能阻止鼠标向下开火。但是,不再有从MouseDown到MouseUp的选择。所以我的结论是,它阻止了鼠标按下后触发的默认操作。因此,它并不能解决我的问题,那就是避免这个MouseDown事件,而是触发DragStart。有时(不太常见),当我在移动鼠标时“MouseDown”时,我会收到一个DragStart事件。实际上,我的意思是将preventDefault()
放入addDragStartHandler
中,以避免浏览器在开始拖动文本时执行的默认操作。这不是对你问题的直接回答,而是一种让拖放工作正常进行的方法。但是总体想法是错误的,您不能期望DragStartEvent
通过preventDefault()
或stopPropagaton()
MouseDownEvent.Tx;事实上你的代码证实了我以前的想法。我只是让“拖动部分”的代码出现在我的问题中。除了:“theWidget.getElement().setDragable(Element.Dragable_TRUE),我没有把它放进去,因为它不是图像小部件所必需的,也不是HTML小部件***,wometimes会根据鼠标移动来拖动它(很难获取和复制)。所以我仍然需要一个解决方案。
theWidget.addDragStartHandler(new DragStartHandler() {
public void onDragStart(DragStartEvent event) {
event.setData(data, "some data" );
}
});
targetWidget.addDragOverHandler(new DragOverHandler() {
public void onDragOver(DragOverEvent event) {
// Some kind of effect, if you like.
}
});
targetWidget.addDropHandler(new DropHandler() {
public void onDrop(DropEvent event) {
event.PreventDefault();
String data = event.getData("data");
}
});