我正在开发一个支持在页面上拖动的网络应用程序,只需监视 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/