3 回答
TA贡献1802条经验 获得超10个赞
有几个问题:
你的定时器只是调用
getSeconds
。getSeconds
不执行任何更新 HTML 的操作。为此,您需要重复该document.querySelector(".app").innerHTML = runClock.renderHTML();
部分。(事实上,该Clock#getSectonds
方法没有做任何有用的事情,你可以摆脱它。)您的代码确实如此
this.time = new Date()
,然后仅this.time
在整个过程中使用。该Date
对象是不变的,它不会不断更新自己。this.time
你根本不需要,只需使用new Date()
inrenderHTML
。您的代码从不设置小时或分钟,因此它只显示
0
s 。
下面是一个修改构造函数的示例,它接受要更新的元素,然后调用renderHTML
计时器回调,使用new Date
inrenderHTML
获取当前日期/时间。(我还添加了各种缺失的分号。您应该使用它们,或者不使用它们并依赖 ASI,但不要偶尔使用它们。)
const htmlMarkup = (hours = 0, minutes = 0, seconds = 0) => {
console.log('render html');
return (
`<div class="clock">
<h2>clock: ${hours} ${minutes} ${seconds}</h2>
</div>`
);
};
class Clock {
constructor(element) {
this.element = element;
setInterval(()=> {
this.element.innerHTML = this.renderHTML();
},1000);
}
renderHTML() {
const dt = new Date();
return htmlMarkup(dt.getHours(), dt.getMinutes(), dt.getSeconds());
}
}
const runClock = new Clock(document.querySelector(".app"));
<div class="app"></div>
TA贡献1770条经验 获得超3个赞
我做了以下更改:
setInterval(()=> {
document.querySelector(".app").innerHTML = runClock.renderHTML();
},1000)
和
getSeconds() {
return (new Date()).getSeconds()
}
现在只有秒数在变化。您将不得不处理几分钟和几小时。
TA贡献1893条经验 获得超10个赞
你不会再打电话了new Date()。检查这个。
const htmlMarkup = (hours = 0, minutes = 0, seconds = 0) => {
console.log("render html");
return `<div class="clock">
<h2>clock: ${hours} ${minutes} ${seconds}</h2>
</div>`;
};
class Clock {
constructor() {
setInterval(() => {
this.getSeconds();
}, 1000);
}
renderHTML() {
return htmlMarkup(this.hours, this.minutes, this.getSeconds());
}
getSeconds() {
this.time = new Date();
this.seconds = this.time.getSeconds();
console.log(this.time);
}
}
const runClock = new Clock();
document.querySelector(".app").innerHTML = runClock.renderHTML();
添加回答
举报