JavaScript:检查鼠标按钮是否按下?
有没有一种方法可以检测JavaScript中的鼠标按钮当前是否处于按下状态?
我知道“ mousedown”事件,但这不是我所需要的。按下鼠标按钮后的一段时间,我希望能够检测它是否仍被按下。
这可能吗?
回答:
关于Pax的解决方案:如果用户有意或无意地单击了多个按钮,则该按钮将不起作用。不要问我我怎么知道:-(。
正确的代码应如下所示:
var mouseDown = 0;document.body.onmousedown = function() {
++mouseDown;
}
document.body.onmouseup = function() {
--mouseDown;
}
通过这样的测试:
if(mouseDown){ // crikey! isn't she a beauty?
}
如果您想知道按下了什么按钮,请准备将mouseDown设置为一个计数器数组,并对单独的按钮分别计数:
// let's pretend that a mouse doesn't have more than 9 buttonsvar mouseDown = [0, 0, 0, 0, 0, 0, 0, 0, 0],
mouseDownCount = 0;
document.body.onmousedown = function(evt) {
++mouseDown[evt.button];
++mouseDownCount;
}
document.body.onmouseup = function(evt) {
--mouseDown[evt.button];
--mouseDownCount;
}
现在,您可以检查确切按下了哪些按钮:
if(mouseDownCount){ // alright, let's lift the little bugger up!
for(var i = 0; i < mouseDown.length; ++i){
if(mouseDown[i]){
// we found it right there!
}
}
}
现在请注意,以上代码仅适用于向您传递按钮编号(从0开始)的标准兼容浏览器。IE使用当前按下按钮的位掩码:
- 0为“什么都没按下”
- 1左
- 2对
- 4个中间
- 以及以上的任意组合,例如,左+中为5
因此,请相应地调整您的代码!我把它留作练习。
顺便说一下,IE具有一种适用于您的情况的功能:当其他浏览器仅针对鼠标事件(onclick,onmousedown和onmouseup)发送“
button”时,IE也会通过onmousemove发送它。因此,当您需要了解按钮状态时就可以开始监听onmousemove,并在收到按钮后立即检查evt.button
-现在您知道按下了哪些鼠标按钮:
// for IE only!document.body.onmousemove = function(){
if(event.button){
// aha! we caught a feisty little sheila!
}
};
当然,如果她死了而且不动,你什么也得不到。
相关链接:
- MouseEvent的按钮(DOM 2)
- MSDN的按钮
:我不知道为什么要保留document.body样式的代码。将事件处理程序直接附加到文档会更好。
以上是 JavaScript:检查鼠标按钮是否按下? 的全部内容, 来源链接: utcz.com/qa/428638.html