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.
}
添加回答
舉報