#javascript
#javascript
Вопрос:
Предполагается, что фигура появится через 1 секунду и запустит таймер. Предполагается, что фигура исчезает при щелчке и завершении таймера и отображает скорость реакции.
Еще через секунду фигура должна появиться снова и снова запустить таймер. Вот где код не работает. По щелчку фигура должна исчезнуть, завершить таймер и отобразить время реакции.
<head>
<title>Javascript</title>
<style type="text/css">
#shape{
width:200px;
height:200px;
background-color: red;
position:relative;
visibility : hidden;
}
</style>
</head>
<body>
<p id="Reactionline">Reaction time: <span id="reactionadded"></span></p>
<hr style="margin-bottom: 5px; display:none;">
<div id="shape"></div>
<script>
var start = new Date().getTime();
function makeShapeAppear() {
document.getElementById("shape").style.visibility = "visible";
start= new Date().getTime();
}
function makeShapeDisappear() {
document.getElementById('shape').onclick = function(){
document.getElementById('shape').style.visibility="hidden";
var end = new Date().getTime();
var time = (end - start)/1000 " seconds";
document.getElementById("reactionadded").innerHTML= time;
}
}
setTimeout(makeShapeAppear, 1000);
makeShapeDisappear();
setTimeout(makeShapeAppear, 1000);
makeShapeDisappear();
</script>
</body>
Комментарии:
1. Оба таймера истекают одновременно… Обратите внимание, что
setTimeout
это не останавливает выполнение остальной части вашего кода.
Ответ №1:
Вы должны поместить setTimeout(makeShapeAppear,1000)
метод в makeShapeDisappear()
функцию.
Ответ №2:
Вы движетесь в правильном направлении, но ваш подход к коду неверен. Вот один из правильных способов достижения того, что вы хотите сделать. Запустите фрагмент кода ниже
let start = new Date().getTime();
document.getElementById('shape').onclick = function() {
document.getElementById('shape').style.visibility = "hidden";
var end = new Date().getTime();
var time = (end - start) / 1000 " seconds";
document.getElementById("reactionadded").innerHTML = time;
makeShapeAppear();
}
function makeShapeAppear() {
setTimeout(()=>{
document.getElementById("shape").style.visibility = "visible";
start = new Date().getTime();
},1000);
}
makeShapeAppear();
#shape {
width: 200px;
height: 200px;
background-color: red;
position: relative;
visibility: hidden;
}
<p id="Reactionline">
Reaction time: <span id="reactionadded"></span>
</p>
<hr style="margin-bottom: 5px; display:none;">
<div id="shape"></div>
Ответ №3:
var start = new Date().getTime();
setTimeout(()=>{e.style.visibility="visible"}, 1000);
document.getElementById("shape").addEventListener('click',(e)=>{
e.style.visibility="hidden";
var end = new Date().getTime();
var time = (end - start)/1000 " seconds";
document.getElementById("reactionadded").innerHTML= time;
setTimeout(()=>{e.style.visibility="visible"}, 1000);
});
Ответ №4:
makeShapeDisappear устанавливает onclick кнопки, поэтому нет необходимости вызывать ее дважды, обратный вызов при нажатии должен вызываться при каждом нажатии кнопки.
просто добавьте
setTimeout(makeShapeAppear, 1000);
в коде щелчка, чтобы он снова появился после того, как вы заставите его исчезнуть..
и вызовите ее один раз снаружи, чтобы она появилась для начала..
поскольку вы использовали settimeout так, как будто он «ожидает» — я просто упомяну, что вы могли бы сделать setTimeout ожидаемым, выполнив что-то вроде этого:
async function wait(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms);
});
}
и тогда вы могли бы вызвать
await wait(1000);
когда вы хотите, чтобы весь код «подождал» секунду..
хотя в этом случае вам это не понадобится
Ответ №5:
<head>
<title>Javascript</title>
<style type="text/css">
#shape{
width:200px;
height:200px;
background-color: red;
position:relative;
visibility : hidden;
}
</style>
</head>
<body>
<p id="Reactionline">Reaction time: <span id="reactionadded"></span></p>
<hr style="margin-bottom: 5px; display:none;">
<div id="shape"></div>
<script>
var start = new Date().getTime();
function makeShapeAppear() {
document.getElementById("shape").style.visibility = "visible";
start= new Date().getTime();
}
function makeShapeDisappear() {
document.getElementById('shape').onclick = function(){
document.getElementById('shape').style.visibility="hidden";
var end = new Date().getTime();
var time = (end - start)/1000 " seconds";
document.getElementById("reactionadded").innerHTML= time;
setTimeout(makeShapeAppear, 1000);
makeShapeDisappear();
}
}
setTimeout(makeShapeAppear, 1000);
makeShapeDisappear();
</script>
</body>