栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

关于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使用一个名为…“ 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样式的代码。将事件处理程序直接附加到文档会更好。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/464772.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号