javascript - 在 mousemove 之后以编程方式触发 HTML5 dragstart

标签 javascript html drag-and-drop html5-draggable

我目前正在为 HTML5 拖放而苦苦挣扎,因为我想实现一些特定的东西。

我有一个可以使用 HTML5 API 拖动的 div,但我只希望在用户真正想要拖动时发生拖动(因为它会在之后触发更多处理程序)。

这就是为什么当 mousemove 满足特定条件时我触发 dragstart 的原因。

var fnMousemove = function (oEvent) {
    if (myCondition) {
        document.removeEventListener("mousemove", fnMousemove);
        oDraggable.setAttribute("draggable", true);
        oDraggable.addEventListener("dragstart", fnDragstart);
        oDraggable.addEventListener("drag", fnDrag);
        oDraggable.addEventListener("dragend", fnDragend);

        // Fire a dragstart event, now that we know what to do with it
        var e = document.createEvent("MouseEvents"); //$NON-NLS-1$
        e.initEvent("dragstart"); //$NON-NLS-1$
        oDraggable.dispatchEvent(e);
    }
};

但是正如您已经猜到的那样,从正确触发 dragstart 但没有其他拖动事件(dragdragend...)。

有什么地方我没有妥善处理吗?或者您能看到从 mousemove 处理程序启动浏览器拖放的解决方法吗? (按住鼠标按钮)

提前致谢!

你可以找到一个简单的运行示例here

最佳答案

看起来通常触发 dragstart 的机制预计通常会跟随 dragstart 的其他事件并相应地触发它们。

因此,如果您要自己触发 dragstart 事件,那么您还必须自己实现流程的其余部分。

为了特别解决您的问题,我建议您创建如下用户体验:

  1. 指示用户点击相应区域以启用拖动
  2. 在用户点击该区域后,显示反馈以表明现在可以使用拖动。

它只是意味着您应该寻找的是如何根据拖放 API 的当前状态改善用户体验。

关于javascript - 在 mousemove 之后以编程方式触发 HTML5 dragstart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21836313/

相关文章:

javascript - 如何搜索 HTML 的每一部分

c++ - 我怎样才能将文件拖放到哪个 gtkmm 图像小部件

WPF 拖放到 DataGrid

javascript - 如何在 JavaScript 刺激中导入 npm 模块

javascript - Angular JS调整大小操作

javascript - 网络应用程序可以转换为谷歌浏览器应用程序吗?

html - CSS3 和 HTML 的事件颜色

html - 如何从 css 继承中排除标签(:not is not working)

windows - Qt - QTableWidget 不接受放置

javascript - iOS 上的 JQ UI 可拖动 : initiating dragging in taphold-handler