我正在製作網頁遊戲,並且我想在用戶啓動遊戲時調用計時器。基本上,我如何去做是當一個WASD鍵被擊中時,啓動計時器。問題是,如果您不止一次地按下按鍵,它會每次啓動計時器。我只想調用一次函數。我正在考慮clearInterval()
,但那會阻止計時器。不理想。在keydown上,使用JavaScript只運行一次計時器
這是我的代碼。 (小提琴鏈接如下)
我認爲應該發生的事情是,當任何按鍵被按下,它將首先檢查fired
是否等於false
。如果是,請將其設置爲true
。然後如果按下W,A,S或D鍵,啓動定時器。
然後當密鑰恢復時,將fired
設置爲false。
var fired = false;
var timer = document.getElementById("timer");
var playerObj = {
elapsedTime: 0,
startTimer: function() {
setInterval(function() {
playerObj.elapsedTime += 1;
timer.innerHTML = playerObj.elapsedTime;
}, 1000);
}
};
var fired = false;
document.onkeydown = function (e) {
var w = e.keyCode == '87',
a = e.keyCode == '65',
s = e.keyCode == '83',
d = e.keyCode == '68';
if (!fired) {
fired = true;
if (w || a || s || d) {
playerObj.startTimer();
}
}
};
document.onkeyup = function() {
fired = false;
};
我提到this question's答案,並試圖用一個標誌,但它似乎並沒有這樣的伎倆。
那麼你的代碼是在關鍵幀設置標誌回false。不要這樣做。 – nnnnnn
@nnnnnn我覺得這很奇怪。只是做了那個人在問題 – Matthew
中所說的話。在另一個問題中,他們擔心如果用戶把鑰匙關掉,會發生什麼。這不是你想要解決的問題。 – nnnnnn