在回答这个问题
我不太确定为什么您的系统决定在点击发生在浏览器之外(或在图像之外)时拖动图像..为了正确回答这个问题,我需要查看您的实际代码(只是鼠标事件会做)。但是,如果您实施我在下面提到的系统,那么您不应该遇到您要问的问题。
更多信息
好老的 Quirksmode 对此有话要说......这基本上相当于这样一个事实,即由于 W3C,您无法检测到鼠标移动处理程序中是否按下了左键,因为当没有按下任何按钮时e.button
报告 0,而当左键被按下 - 你猜怎么着?-e.button
报告 0!(适用于 W3C 兼容的浏览器)。这是我完全同意 Internet Explorer 的“二进制标志”实现的时候之一:
http://www.quirksmode.org/js/events_properties.html#button
获得鼠标状态的唯一方法 - 我知道 - 是使用mousedown
和- 检测和记录mouseup
- 这听起来像你已经在做的事情。现在我还没有机会玩任何新的基于“触摸”的事件,他们可能会帮助你……但让它在跨浏览器上工作会很棘手。在一天结束时,有时您必须接受您在浏览器环境中工作,它永远不会像专门设计的应用程序那样流畅。
适用于 Internet Explorer 的快速代码:
document.body.onmousemove = function(e){
e = e ? e : Event;
if ( e.button == 1 ) {
/// mouse button is pressed
}
}
适用于 IE 和几乎其他任何东西的快速代码:
var delm = document.documentElement ? document.documentElement : document.body;
var buttonPressed = false;
delm.onmousdown = function(e){
buttonPressed = true;
}
delm.onmousup = function(e){
buttonPressed = false;
}
delm.onmousmove = function(e){
if ( buttonPressed ) {
/// the button is pressed, but only whilst being
/// detected inside the browser
}
}
正如其他海报所指出的那样,您可以尝试实现一个系统,该系统可以检测用户指针何时离开/重新进入浏览器环境 - 但多年来我在这方面的所有尝试都不是很成功。Flash对此有更好的支持,但我怀疑你会想去那里......
边注
正如一些历史信息,今天可能仍然有用,在处理拖动图像时,旧版本的 Internet Explorer 要求在拖动成功之前将以下内容应用于图像。这防止了默认的浏览器拖动系统插入和妨碍。有比使用内联处理程序更好的方法来实现这一点,但我把它放在这里是为了简单明了。
<img src="..." ondragstart="return false;" />