HTML DOM 拖放 : what about when mouse leaves window?

标签 html drag-and-drop

我正在开发一个支持在页面上拖动的网络应用程序,只需监视 mousedown/mousemove/mouseup 事件。那部分效果很好。

问题是我只处理在一个特定元素内部的拖动,按设计,如果用户(无意或无意)拖动到外面,它会“卡住”在拖动模式下。也就是说,鼠标按下,然后鼠标离开窗口,然后鼠标弹起,然后鼠标返回到窗口,看起来它仍在拖动,到我的应用程序。

我还没有想出任何方法来解决这个问题——即使是像“当鼠标重新进入窗口时,鼠标按钮是否按下?”这样简单的方法。会工作。

是否存在这样的功能,而我只是想念它?或者我可以在这里使用一些聪明的解决方法吗?

旧版支持对我来说并不重要——如果它是仅适用于 FF3.5/Chr4/Sf4 的 HTML5 解决方案,我对此很满意。

最佳答案

在IE7/IE8中可以通过以下代码检测鼠标是否在窗口外释放:

document.onmousemove = function(event) {
    event = event || window.event;
    if (document.all && event.button != 1) {
        canceldragging();
    }
}

在 Firefox 和 Webkit 中,当鼠标被释放时,即使鼠标指针在浏览器窗口之外,也会在文档上触发 mouseup 事件。您可以使用 http://www.quirksmode.org/dom/events/tests/click.html 查看此内容

对于 IE8,仅当鼠标按钮在浏览器窗口外释放时,文档 onmouseup 事件才会被触发,如果您允许发生文档选择(如上面的链接那样)。也就是说,在 IE8 中,如果您使用 document.onselectstart 并取消选择,或者如果您在起始元素上使用 unselectable="on",或者如果您调用 document.selection.clear() 组合,则不会获得 mouseup 事件在鼠标按下时使用 document.selection.empty()。

关于HTML DOM 拖放 : what about when mouse leaves window?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2394106/

相关文章:

ios - 如何在拖动时删除单元格的阴影?

c# - 将控件拖放到自定义用户控件上会隐藏

html - 垂直居中作为 `flex-grow: 1` 子元素的 flex 元素?

javascript - 将可滚动的 div 聚焦到一个位置

html - 一个 div 和兄弟 div 自动高度的动态高度

javascript - 如何根据列表项 ID 对 HTML 列表进行排序

html - bootstrap btn-group 单选按钮在实时服务器上不起作用

java - Android拖放多个 TextView

javascript - 如何使拖放列表进行复制而不是移动列表项

javascript - 拖放不适用于一个 div