如何在使用interval时从事件侦听器获取值



我使用javascript创建了一个倒计时手表,然后添加了一个用于停止手表的停止按钮事件监听器

当我停止时钟并停止时,每秒钟(秒(的时间都被发送来逐个返回一个项目。

但我只想得到最后一个项目的值,比如(例如:if StartTime(59:00min(stoptime(50:15 min((我只想得到50:15分钟的停止时间值

请参阅此波纹管代码

function getTimeRemaining(endtime) {
const total = Date.parse(endtime) - Date.parse(new Date());
const seconds = Math.floor((total / 1000) % 60);
const minutes = Math.floor((total / 1000 / 60) % 60);
const hours = Math.floor((total / (1000 * 60 * 60)) % 24);
const days = Math.floor(total / (1000 * 60 * 60 * 24));
return {
total,
days,
hours,
minutes,
seconds
};

}

function initializeClock(id, endtime) {
const clock = document.getElementById(id);
const daysSpan = clock.querySelector('.days');
const hoursSpan = clock.querySelector('.hours');
const minutesSpan = clock.querySelector('.minutes');
const secondsSpan = clock.querySelector('.seconds');

/* buttons */
const startbutton = document.getElementById('Startbtn')
const stopbtton = document.getElementById('Stopbtn');

function updateClock() {
const t = getTimeRemaining(endtime);

daysSpan.innerHTML = t.days;
hoursSpan.innerHTML = ('0' + t.hours).slice(-2);
minutesSpan.innerHTML = ('0' + t.minutes).slice(-2);
secondsSpan.innerHTML = ('0' + t.seconds).slice(-2);

if (t.total <= 0) {
clearInterval(timeinterval);
} else {
stopbtton.addEventListener('click', (e) => {
clearInterval(timeinterval);
var StopTime = t.minutes + ":" + t.seconds;
console.log(StopTime); /* retunred on single item */
})
}
}
// updateClock();
const timeinterval = setInterval(updateClock, 1000);

}



const deadline = new Date(Date.parse(new Date()) + 15 * 24 * 60 * 60 * 1000);

initializeClock('clockdiv', deadline);
body {
text-align: center;
background: #00ECB9;
font-family: sans-serif;
font-weight: 100;
}
h1 {
color: #396;
font-weight: 100;
font-size: 40px;
margin: 40px 0px 20px;
}
#clockdiv {
font-family: sans-serif;
color: #fff;
display: inline-block;
font-weight: 100;
text-align: center;
font-size: 30px;
}
#clockdiv>div {
padding: 10px;
border-radius: 3px;
background: #00BF96;
display: inline-block;
}
#clockdiv div>span {
padding: 15px;
border-radius: 3px;
background: #00816A;
display: inline-block;
}
.smalltext {
padding-top: 5px;
font-size: 16px;
}
#ConferenceMinutes {
animation: TimerBlink 1s linear infinite;
}
@keyframes TimerBlink {
50% {
opacity: 0.1;
}
}
<!-- https://www.sitepoint.com/build-javascript-countdown-timer-no-dependencies/ -->
<!-- https://stackoverflow.com/questions/20618355/how-to-write-a-countdown-timer-in-javascript -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./style.css">
<title>Document</title>
</head>
<body>
<h1>Countdown Clock</h1>
<div id="clockdiv">
<div>
<span class="days"></span>
<div class="smalltext">Days</div>
</div>
<div>
<span class="hours"></span>
<div class="smalltext">Hours</div>
</div>
<div>
<span id="ConferenceMinutes" class="minutes"></span>
<div class="smalltext">Minutes</div>
</div>
<div>
<span class="seconds"></span>
<div class="smalltext">Seconds</div>
</div>
</div>
<div>

<button id="Stopbtn">StopTime</button>

</div>
</body>
<script src="./app.js"></script>
</html>

查看控制台上的代码片段,我如何解决这个问题?

感谢

您需要将事件侦听器移动到间隔之外,只运行一次,现在您在每次迭代中添加它,这会导致这种行为。

试试这个:

const timeinterval = setInterval(updateClock, 1000);
stopbtton.addEventListener('click', (e) => {
const t = getTimeRemaining(endtime);
clearInterval(timeinterval);
const StopTime = t.minutes + ":" + t.seconds;
console.log(StopTime); /* retunred on single item */
})

完整片段:

function getTimeRemaining(endtime) {
const total = Date.parse(endtime) - Date.parse(new Date());
const seconds = Math.floor((total / 1000) % 60);
const minutes = Math.floor((total / 1000 / 60) % 60);
const hours = Math.floor((total / (1000 * 60 * 60)) % 24);
const days = Math.floor(total / (1000 * 60 * 60 * 24));
return {
total,
days,
hours,
minutes,
seconds
};
}
function initializeClock(id, endtime) {
const clock = document.getElementById(id);
const daysSpan = clock.querySelector('.days');
const hoursSpan = clock.querySelector('.hours');
const minutesSpan = clock.querySelector('.minutes');
const secondsSpan = clock.querySelector('.seconds');
/* buttons */
const startbutton = document.getElementById('Startbtn')
const stopbtton = document.getElementById('Stopbtn');
function updateClock() {
const t = getTimeRemaining(endtime);
daysSpan.innerHTML = t.days;
hoursSpan.innerHTML = ('0' + t.hours).slice(-2);
minutesSpan.innerHTML = ('0' + t.minutes).slice(-2);
secondsSpan.innerHTML = ('0' + t.seconds).slice(-2);
if (t.total <= 0) {
clearInterval(timeinterval);
} 
}
// updateClock();
const timeinterval = setInterval(updateClock, 1000);
stopbtton.addEventListener('click', (e) => {
const t = getTimeRemaining(endtime);
clearInterval(timeinterval);
const StopTime = t.minutes + ":" + t.seconds;
console.log(StopTime); /* retunred on single item */
})
}

const deadline = new Date(Date.parse(new Date()) + 15 * 24 * 60 * 60 * 1000);
initializeClock('clockdiv', deadline);
body {
text-align: center;
background: #00ECB9;
font-family: sans-serif;
font-weight: 100;
}
h1 {
color: #396;
font-weight: 100;
font-size: 40px;
margin: 40px 0px 20px;
}
#clockdiv {
font-family: sans-serif;
color: #fff;
display: inline-block;
font-weight: 100;
text-align: center;
font-size: 30px;
}
#clockdiv>div {
padding: 10px;
border-radius: 3px;
background: #00BF96;
display: inline-block;
}
#clockdiv div>span {
padding: 15px;
border-radius: 3px;
background: #00816A;
display: inline-block;
}
.smalltext {
padding-top: 5px;
font-size: 16px;
}
#ConferenceMinutes {
animation: TimerBlink 1s linear infinite;
}
@keyframes TimerBlink {
50% {
opacity: 0.1;
}
}
<!-- https://www.sitepoint.com/build-javascript-countdown-timer-no-dependencies/ -->
<!-- https://stackoverflow.com/questions/20618355/how-to-write-a-countdown-timer-in-javascript -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./style.css">
<title>Document</title>
</head>
<body>
<h1>Countdown Clock</h1>
<div id="clockdiv">
<div>
<span class="days"></span>
<div class="smalltext">Days</div>
</div>
<div>
<span class="hours"></span>
<div class="smalltext">Hours</div>
</div>
<div>
<span id="ConferenceMinutes" class="minutes"></span>
<div class="smalltext">Minutes</div>
</div>
<div>
<span class="seconds"></span>
<div class="smalltext">Seconds</div>
</div>
</div>
<div>

<button id="Stopbtn">StopTime</button>

</div>
</body>
<script src="./app.js"></script>
</html>

最新更新