为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUWWW 2019-10-17 11:21:21
有没有一种方法可以检测JavaScript中的鼠标按钮当前是否处于按下状态?我知道“ mousedown”事件,但这不是我所需要的。按下鼠标按钮后的一段时间,我希望能够检测它是否仍被按下。这可能吗?
查看完整描述

3 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

这是一个古老的问题,这里的答案似乎主要提倡使用mousedown并mouseup跟踪按钮是否被按下。但是,正如其他人指出的那样,mouseup只有在浏览器中执行时才会触发,这可能导致失去对按钮状态的跟踪。


但是,MouseEvent(现在)指示当前按下了哪些按钮:


对于所有现代浏览器(Safari除外),请使用 MouseEvent.buttons

对于Safari浏览器,使用MouseEvent.which(buttons将是不确定的Safari浏览器)注:which从使用不同数量buttons的右和中间点击。

当在上注册时document,mousemove一旦光标重新进入浏览器,它将立即触发,因此,如果用户释放到外面,则一旦将鼠标移回里面,状态就会被更新。


一个简单的实现可能看起来像:


var leftMouseButtonOnlyDown = false;


function setLeftButtonState(e) {

  leftMouseButtonOnlyDown = e.buttons === undefined 

    ? e.which === 1 

    : e.buttons === 1;

}


document.body.onmousedown = setLeftButtonState;

document.body.onmousemove = setLeftButtonState;

document.body.onmouseup = setLeftButtonState;

如果需要更复杂的场景(不同的按钮/多个按钮/控制键),请查看MouseEvent文档。当Safari取消游戏时,这应该会变得更加容易。


查看完整回答
反对 回复 2019-10-17
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

我认为最好的方法是保留自己的鼠标按钮状态记录,如下所示:


var mouseDown = 0;

document.body.onmousedown = function() { 

    mouseDown = 1;

}

document.body.onmouseup = function() {

    mouseDown = 0;

}

然后,在您的代码后面:


if (mouseDown == 1) {

    // the mouse is down, do what you have to do.

}


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 1463 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号