我正在开发一个电子应用程序,该应用程序使用HTML拖放功能在窗口之间移动标签。如果将标签页拖到标签页窗格中的另一个标签页上,它将移动到该标签页中;如果将标签页拖到其他位置,它将创建一个带有标签页的新窗口(类似于任何现代Web浏览器的方式)。
但是,放置事件会在其上放置了选项卡的窗口中触发,而不是从中拖动该选项卡的窗口,这意味着当用户尝试拖动时,我无法知道是否将该选项卡拖放到了一个选项卡窗格上从一个窗口的选项卡到另一个窗口的选项卡。这意味着我无法在dragend事件中取消创建新窗口,并且用户不能将选项卡拖动到另一个窗口的选项卡中。
var tabDropped = false;
$(document).on('drop', '.tabpane__tabs li', function(e) {
// Tab was dropped on a tabpane, move it there
tabDropped = true; // This does not work because it is called in a different window
});
$(document).on('dragend', function(e) {
if (!tabDropped) {
// Tab was not dropped on a tabpane, create a new window with the tab
}
});
我已经尝试在drop事件之后清除dataTransfer的数据,但是dataendfer在dragend事件中受到保护,因此我无法检测到数据是否已清除。我相信在拖放后发送ipc消息会太慢,并且在窗口接收消息之前会触发dragend事件。如何在dragend事件中检测是否发生过掉落?