【发布时间】:2022-01-23 04:16:21
【问题描述】:
我一边看教程一边写项目(比如,听我必须做的事情,然后自己做,看看我是否能成功)。这是代码:
const months = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December",
];
const weekdays = [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
];
const deadline = document.querySelector(".deadline");
const giveaway = document.querySelector(".giveaway");
const h4 = document.querySelectorAll(".deadline-format h4");
let futureDate = new Date(2022, 4, 17, 11, 30, 0);
const yearTime = futureDate.getFullYear();
const monthTime = futureDate.getMonth();
const dayTime = futureDate.getDay();
const dateTime = futureDate.getDate();
const hourTime = futureDate.getHours();
const minutesTime = futureDate.getMinutes();
giveaway.innerHTML = ` Giveaway ends on ${weekdays[dayTime]}, ${dateTime} ${months[monthTime]} ${yearTime}, ${hourTime}:${minutesTime}am`;
const futureTime = futureDate.getTime();
const currentTime = new Date().getTime();
let getRemainingTime = () => {
const timeLeft = futureTime - currentTime;
const oneDay = 24 * 60 * 60 * 1000;
const oneHour = 60 * 60 * 1000;
const oneMinute = 60 * 1000;
const oneSecond = 1000;
let days = Math.floor(timeLeft / oneDay);
let hours = Math.floor((timeLeft % oneDay) / oneHour);
let mins = Math.floor(((timeLeft % oneDay) % oneHour) / oneMinute);
let secs = Math.floor(
(((timeLeft % oneDay) % oneHour) % oneMinute) / oneSecond
);
const values = [days, hours, mins, secs];
let zeroBefore = (item) => {
if (item < 10) {
return (item = `0${item}`);
} else {
return item;
}
};
h4.forEach((item, index) => {
item.innerHTML = zeroBefore(values[index]);
});
};
// countdown
let countdown = setInterval(getRemainingTime, 1000);
//set initial values
getRemainingTime();
问题出现在函数开始之前:
const futureTime = futureDate.getTime();
const currentTime = currentDate.getTime();
let getRemainingTime = () => {
const timeLeft = futureTime - currentTime;
const oneDay = 24 * 60 * 60 * 1000;
const oneHour = 60 * 60 * 1000;
const oneMinute = 60 * 1000;
const oneSecond = 1000;
let days = Math.floor(timeLeft / oneDay);
let hours = Math.floor((timeLeft % oneDay) / oneHour);
let mins = Math.floor(((timeLeft % oneDay) % oneHour) / oneMinute);
let secs = Math.floor(
(((timeLeft % oneDay) % oneHour) % oneMinute) / oneSecond
);
const values = [days, hours, mins, secs];
let zeroBefore = (item) => {
if (item < 10) {
return (item = `0${item}`);
} else {
return item;
}
};
h4.forEach((item, index) => {
item.innerHTML = zeroBefore(values[index]);
});
基本上,问题在于变量“currentTime”超出了函数范围,因此实时页面由于某种原因不会每秒更新一次。相反,如果我将“currentTime”放入函数中,它会突然起作用。为什么会这样?为什么我需要将变量“currentTime”放入函数中,而我不需要将变量“futureTime”放入函数中,它在我的函数中与“currentTime”的用法相同? 谢谢,如果我做错了什么对不起,这是我在这个网站上的第一篇文章!
【问题讨论】:
标签: javascript setinterval countdown