【发布时间】:2021-02-15 19:06:58
【问题描述】:
这是我的 JS 小提琴:
https://jsfiddle.net/apasric4/xkzwqr1m/1/
我的程序应该启动一个倒数计时器,计算从今天到用户在输入字段中选择的日期的剩余时间(以天、小时、秒等为单位)。
当程序用正确的剩余时间更新 HTML 时,当我尝试每秒更新倒数计时器时,问题就开始了。它出于某种原因返回 NaN 值。 为什么会这样??
这是我的 JS:
const input = document.querySelector('input')
let timeInterval;
let timeStop;
input.addEventListener('change', (e) => {
e.preventDefault()
timeStop = true;
endTime = Date.parse(e.target.value)
updateHTML(endTime)
})
function updateHTML(endTime) {
let time = calculateTimeDiff(endTime)
if (time.total <= 0) {
timeStop = false;
}
for (let pro in time) {
let el = document.querySelector(`.${pro}`)
if (el) {
el.innerHTML = time[pro];
}
}
updateCounter();
}
function updateCounter () {
if (timeStop) {
timeInterval = setInterval(updateHTML, 1000);
} else {
clearInterval(timeInterval);
}
}
//returning time remaining till date in object form
function calculateTimeDiff(endTime) {
let start = Date.now();
let end = endTime;
let t = (end-start);
let seconds = Math.floor((t / 1000) % 60);
let minutes = Math.floor((t / 1000 / 60) % 60);
let hours = Math.floor((t / (1000 * 60 * 60)) % 24);
let days = Math.floor(t / (1000 * 60 * 60 * 24));
return {
total: t,
days: days,
hours: hours,
minutes: minutes,
seconds: seconds
}
}
【问题讨论】:
-
这意味着您正在尝试使用无法理解的字符串创建 Date 实例。
-
同时在区间回调中调用
setInterval()再次会导致各种疯狂的问题。 -
timeInterval=setInterval(updateHTML, 1000)。和function updateHTML (endTime) {。 -
setInterval(updateHTML无参数调用updateHTML。endTime未定义。
标签: javascript setinterval countdowntimer clearinterval