js - 使用 onkeyup 的时间跨度
js - timespan to use onkeyup
我正在制作一款基本的 2 人 RPS 游戏,但我无法实现这个想法。
有一个 3 秒的倒计时计时器,一旦倒计时结束,必须有 0.5 秒的时间跨度才能按下按钮。
但我无法弄清楚或找到如何制作时间跨度..
我当前的代码:
var p1 = document.getElementById('p1');
var p2 = document.getElementById('p2');
var timer = setInterval(timerFunc, 1000);
var counter = 0;
function timerFunc() {
document.getElementById("timer").innerHTML=counter < 3 ? 3 - counter : "";
if (counter == 3) {
document.body.onkeyup = function(e){if(e.keyCode == 49){p1.innerHTML = 'scissors';
}else if(e.keyCode == 50){p1.innerHTML = 'paper';
}else if(e.keyCode == 51){p1.innerHTML = 'rock';
}else if(e.keyCode == 56){p2.innerHTML = 'scissors';
}else if(e.keyCode == 57){p2.innerHTML = 'paper';
}else if(e.keyCode == 48){p2.innerHTML = 'rock';
}
}
clearInterval(timer);
counter++;
timer = setTimeout(timerFunc, 500);
return;
} else if (counter == 4) {
clearTimeout(timer);
}
counter++;
}
(代码已被编辑,我无法找出 keyups 的 addeventlisteners 所以我用 if else 做了它,即使它看起来超级混乱)
时间跨度仍然无法正常工作
var timer = setInterval(timerFunc, 1000);
var counter = 0;
function timerFunc() {
document.getElementById("timer").innerHTML=counter < 3 ? 3 - counter : "";
if (counter == 3) {
document.body.onkeyup == function() {} //
clearInterval(timer);
counter++;
timer = setTimeout(timerFunc, 500);
return;
} else if (counter == 4) {
clearTimeout(timer);
}
counter++;
}
游戏完全正常运行,具有 3 秒倒计时和 0.5 秒点击时间跨度,可能看起来像这样:
const PLAYERS = {
player1: {
name: 'Player 1',
keys: ['q', 'w', 'e'],
throw: ['scissors', 'rock', 'paper'],
played: false
},
player2: {
name: 'Player 2',
keys: ['r', 't', 'y'],
throw: ['scissors', 'rock', 'paper'],
played: false
}
};
const PLAYERS_VALS = Object.values(PLAYERS);
let count = 3;
let countdown = document.querySelector('#countdown');
countdown.innerHTML = count;
let canPlay = false;
const PLAY = key => {
PLAYERS_VALS.forEach((player, i) => {
if (player.keys.includes(key) && player.played == false) { // DO WHATEVER ONCE X PLAYER CLICKS
player.played = true; // PREVENT CHANGING CHOICE
let idx = player.keys.indexOf(key);
document.querySelector(`#player${i + 1}`).innerHTML = `${player.name} threw <b>${player.throw[idx]}</b>`;
}
});
};
let cntID;
const COUNTDOWN = () => {
// ADD THE 3 SECONDS COUTDOWN
cntID = setInterval(() => {
count--;
countdown.innerHTML = count;
if (count === 0) {
canPlay = true; // ALLOW THE CLICKS
countdown.innerHTML = 'GO!';
clearInterval(cntID); // STOP COUNTDOWN ONCE IT REACHES 0
// ADD THE .5 SECONDS TIMESPAN TO CLICK
setTimeout(() => {
canPlay = false; // DISABLE THE CLICKS
countdown.innerHTML = 'Ended.';
}, 500);
}
}, 1000);
};
COUNTDOWN();
const RESTART = () => {
count = 3;
countdown.innerHTML = count;
PLAYERS_VALS.forEach((player, i) => {
player.played = false;
document.querySelector(`#player${i + 1}`).innerHTML = `${player.name}`;
});
COUNTDOWN();
};
document.body.addEventListener('keydown', e => {
if (canPlay) PLAY(e.key);
});
document.querySelector(`#restart`).addEventListener('click', e => {
RESTART();
});
<div id="countdown"></div>
<div id="player1">Player 1</div>
<div id="player2">Player 2</div>
<button id="restart">Restart</button>
我正在制作一款基本的 2 人 RPS 游戏,但我无法实现这个想法。
有一个 3 秒的倒计时计时器,一旦倒计时结束,必须有 0.5 秒的时间跨度才能按下按钮。 但我无法弄清楚或找到如何制作时间跨度..
我当前的代码:
var p1 = document.getElementById('p1');
var p2 = document.getElementById('p2');
var timer = setInterval(timerFunc, 1000);
var counter = 0;
function timerFunc() {
document.getElementById("timer").innerHTML=counter < 3 ? 3 - counter : "";
if (counter == 3) {
document.body.onkeyup = function(e){if(e.keyCode == 49){p1.innerHTML = 'scissors';
}else if(e.keyCode == 50){p1.innerHTML = 'paper';
}else if(e.keyCode == 51){p1.innerHTML = 'rock';
}else if(e.keyCode == 56){p2.innerHTML = 'scissors';
}else if(e.keyCode == 57){p2.innerHTML = 'paper';
}else if(e.keyCode == 48){p2.innerHTML = 'rock';
}
}
clearInterval(timer);
counter++;
timer = setTimeout(timerFunc, 500);
return;
} else if (counter == 4) {
clearTimeout(timer);
}
counter++;
}
(代码已被编辑,我无法找出 keyups 的 addeventlisteners 所以我用 if else 做了它,即使它看起来超级混乱)
时间跨度仍然无法正常工作
var timer = setInterval(timerFunc, 1000);
var counter = 0;
function timerFunc() {
document.getElementById("timer").innerHTML=counter < 3 ? 3 - counter : "";
if (counter == 3) {
document.body.onkeyup == function() {} //
clearInterval(timer);
counter++;
timer = setTimeout(timerFunc, 500);
return;
} else if (counter == 4) {
clearTimeout(timer);
}
counter++;
}
游戏完全正常运行,具有 3 秒倒计时和 0.5 秒点击时间跨度,可能看起来像这样:
const PLAYERS = {
player1: {
name: 'Player 1',
keys: ['q', 'w', 'e'],
throw: ['scissors', 'rock', 'paper'],
played: false
},
player2: {
name: 'Player 2',
keys: ['r', 't', 'y'],
throw: ['scissors', 'rock', 'paper'],
played: false
}
};
const PLAYERS_VALS = Object.values(PLAYERS);
let count = 3;
let countdown = document.querySelector('#countdown');
countdown.innerHTML = count;
let canPlay = false;
const PLAY = key => {
PLAYERS_VALS.forEach((player, i) => {
if (player.keys.includes(key) && player.played == false) { // DO WHATEVER ONCE X PLAYER CLICKS
player.played = true; // PREVENT CHANGING CHOICE
let idx = player.keys.indexOf(key);
document.querySelector(`#player${i + 1}`).innerHTML = `${player.name} threw <b>${player.throw[idx]}</b>`;
}
});
};
let cntID;
const COUNTDOWN = () => {
// ADD THE 3 SECONDS COUTDOWN
cntID = setInterval(() => {
count--;
countdown.innerHTML = count;
if (count === 0) {
canPlay = true; // ALLOW THE CLICKS
countdown.innerHTML = 'GO!';
clearInterval(cntID); // STOP COUNTDOWN ONCE IT REACHES 0
// ADD THE .5 SECONDS TIMESPAN TO CLICK
setTimeout(() => {
canPlay = false; // DISABLE THE CLICKS
countdown.innerHTML = 'Ended.';
}, 500);
}
}, 1000);
};
COUNTDOWN();
const RESTART = () => {
count = 3;
countdown.innerHTML = count;
PLAYERS_VALS.forEach((player, i) => {
player.played = false;
document.querySelector(`#player${i + 1}`).innerHTML = `${player.name}`;
});
COUNTDOWN();
};
document.body.addEventListener('keydown', e => {
if (canPlay) PLAY(e.key);
});
document.querySelector(`#restart`).addEventListener('click', e => {
RESTART();
});
<div id="countdown"></div>
<div id="player1">Player 1</div>
<div id="player2">Player 2</div>
<button id="restart">Restart</button>