Javascript 如何知道鼠标按钮的当前状态(mouseup状态或mousedown状态)

Javascript 如何知道鼠标按钮的当前状态(mouseup状态或mousedown状态),javascript,internet-explorer,google-chrome,mousedown,mouseup,Javascript,Internet Explorer,Google Chrome,Mousedown,Mouseup,在Javascript中,当我单击滚动条(页面中出现的任何滚动条)并将鼠标悬停在图像上时,图像再次开始拖动 图像应仅处于鼠标按钮向下拖动的状态 所以我试图通过了解鼠标按钮的状态(mousedown或mouseup)来解决这个问题 这个问题只存在于IE和chrome中,在我尝试的其他浏览器中不存在 Javascript: document.onmousemove = mouseMove; document.onmousedown = mouseDown; document.onmouseup

在Javascript中,当我单击滚动条(页面中出现的任何滚动条)并将鼠标悬停在图像上时,图像再次开始拖动

图像应仅处于鼠标按钮向下拖动的状态

所以我试图通过了解鼠标按钮的状态(mousedown或mouseup)来解决这个问题

这个问题只存在于IEchrome中,在我尝试的其他浏览器中不存在

Javascript:

document.onmousemove = mouseMove;
document.onmousedown = mouseDown;
document.onmouseup   = mouseUp;

function mouseMove(ev) {

    var mouseButtonState;
    // put code here to get mouseButtonState variable
    console.log('state of mouse is'+mouseButtonState);
}
当我移动鼠标时,程序应显示所需的
mouseButtonState
updown


如何知道鼠标按钮的当前状态?

为什么不直接使用jquery拖动来处理此类事件

如果您真的想绑定mouseup和mousedown,可以使用jquery

$(object).on("mouseup",function(){});

在您描述的情况下,问题是您只处理
mouseup
mousedown
状态。还应该考虑处理<代码>模糊< /代码>事件,以知道鼠标已经离开了对象。在回答问题时,您可能希望为其分配与
mouseup

相同的处理程序 我不太清楚,当点击发生在浏览器外部(或图像外部)时,为什么您的系统会决定拖动图像。。为了正确回答这个问题,我需要查看您的实际代码(只需鼠标事件即可)。然而,如果你实现了我在下面提到的一个系统,那么你不应该得到你所问的问题

进一步资料 好的老怪癖模式对此有一些说法。。。这基本上相当于这样一个事实:由于W3C,您无法在mousemove处理程序中检测到是否按下了左按钮,因为当没有按下按钮时,
e.button
报告0,而当按下左按钮时-猜怎么着?-<代码>e.按钮报告0!(适用于W3C complient浏览器)。这是我完全同意Internet Explorer的“二进制标志”实现的一次:

据我所知,获取鼠标状态的唯一方法是使用
mousedown
mouseup
进行检测和记录,这听起来像是您已经在做的事情。现在我还没有机会玩任何新的基于“触摸”的活动,它们可能会帮助你。。。但要让它在横杆上运行是很困难的。最终,有时你不得不接受你在浏览器环境中工作,而它永远不会像专门设计的应用程序那样流畅

适用于Internet Explorer的快速代码:

document.body.onmousemove = function(e){
  e = e ? e : Event;
  if ( e.button == 1 ) {
    /// mouse button is pressed
  }
}
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
  }
}
适用于IE和其他几乎任何东西的快速代码:

document.body.onmousemove = function(e){
  e = e ? e : Event;
  if ( e.button == 1 ) {
    /// mouse button is pressed
  }
}
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;" />


我已经使用纯javascript处理mouseup和mousedown。我这样使用(document.onmousemove=mouseMove;document.onmousedown=mouseDown;document.onmouseup=mouseUp;)将图像对象分配给一个变量。并在调用mouseup时分配
null
。但当我停留在图像上(点击滚动条后),图像对象变量将被分配。我可以通过知道这个状态是mouseup还是mousedown来停止赋值变量。有没有其他方法可以解决这个问题?对不起,我不知道你是否能找到鼠标的当前状态。你需要显示你尝试过的代码,否则就不可能显示出它有什么问题。好的,我把代码放进去了。再看看这个问题吧,Init不仅仅是一个编码问题(0代表左键,等等)。哪个/。按钮仅在“mouseup”和“mousedown”事件上设置,并从最近的“mouseup”或“mousedown”复制到“mousemove”事件中。它们不反映按钮的当前状态,不同的编码不会改变这一点。