3 回答

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取消游戏时,这应该会变得更加容易。

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.
}
添加回答
举报