当前位置: 首页 > 面试题库 >

JavaScript:检查鼠标按钮是否按下?

胡霖
2023-03-14
问题内容

有没有一种方法可以检测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 buttons
var 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使用一个名为…“ event”的全局事件对象。

顺便说一下,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的按钮

更新#1 :我不知道为什么要保留document.body样式的代码。将事件处理程序直接附加到文档会更好。



 类似资料:
  • 我正在用MCP(Mod Coder Pack)制作我自己的Minecraft客户端。 但我不知道如何才能检测例如在更新方法中,如果鼠标按钮被按下,以及哪个。 Im使用MCP 9.10(Minecraft 1.8) 我在谷歌也在这个平台上搜索,但我什么也没找到。 我希望你们中有人能帮助我。

  • 有没有一种方法可以使用收集器/interactionCreate来检测用户是否已经在特定消息上按下了特定按钮?我尝试的一种方法是将其保存在这样的数组中 但是机器人最终总是以“你已经投票”作为回应,那么有什么可行的方法来检查这一点呢?

  • 用户可以选择他/她想选择的任何一个,但是当某个事件触发时,我希望将设置为set checked单选按钮,因为这是默认的checked单选按钮。 我已经尝试了这个版本(有jQuery和没有jQuery):

  • 简介 限制: 下面描述的 AutoHotkey 重映射功能通常不如直接通过 Windows 注册表进行映射那么直接有效. 对于每种方法的优点和缺点, 请参阅 注册表重映射. 重映射键盘和鼠标 内置重映射功能的语法为 OriginKey::DestinationKey。例如, 只包含下面这行内容的 脚本 会将 "a" 键重映射成 "b" 键: a::b 上面的例子没有改变 "b" 键自身的功能. "

  • 本文向大家介绍判断“命令按钮”是否被鼠标单击详解,包括了判断“命令按钮”是否被鼠标单击详解的使用技巧和注意事项,需要的朋友参考一下 Click 事件: 此事件是在一个对象上按下然后释放一个鼠标按钮时发生。它也会发生在一个控件的值改变时。 对一个 Form 对象来说,该事件是在单击一个空白区或一个无效控件时发生。对一个控件来说,这类事件的发生是当单击控件对象的特定区域。(推荐学习:JavaScrip

  • 我正在开发一个示例项目,名为:网球俱乐部管理,使用javascript、HTML、CSS和Bootstrap。在这个项目中,我有一个管理者。html页面,其中有两个按钮添加播放器 注意:我需要做的是,当我点击保存按钮时,它应该检查是否选择了其中一个收音机(性别:男性/女性..在这种情况下)。我还没弄明白。下面是代码文件和屏幕截图 JSIDLE链接:https://jsfiddle.net/mohi