在回答这个问题时
我不太清楚为什么你的系统决定在浏览器外部(或图像外部)发生点击时拖动图像..为了正确回答我需要查看你的实际代码(只是鼠标事件会这样做).但是,如果您按照我在下面提到的那样实现系统,那么您应该不会遇到您要问的问题.
更多的信息
好古老的Quirksmode对此有一些说法…这基本上相当于这样一个事实:感谢W3C你无法检测到鼠标移动处理器中是否按下了左键,因为没有按下任何按钮时e.button报告0和何时按下左键 – 猜猜是什么? – e.button报告0! (对于W3C complient浏览器).这是我完全赞同Internet Explorer的“二进制标志”实现的时代之一:
获得鼠标状态的唯一方法 – 我所知道的 – 是使用mousedown和mouseup来检测和记录 – 听起来就像你正在做的那样.现在我没有机会玩任何较新的“触摸”事件,他们可能能够帮助你……但是让它在crossbrowser上运行会很棘手.在一天结束时,有时你必须接受你在浏览器环境中工作,它永远不会像专门设计的应用程序那样顺利.
适用于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需要在拖动成功之前将以下内容应用于图像.这阻止了默认的浏览器拖动系统切入和阻碍.有比使用内联处理程序更好的方法来实现这一点,但为了简单和清晰起见,我将其放在这里.