【发布时间】:2021-04-08 09:00:21
【问题描述】:
如何为计时器为零时创建自定义事件。我在另一个自定义元素中调用我的自定义元素,我希望在计时器为零时发生一些事情。我很难理解自定义事件,而且我正在努力了解如何在我的情况下使用自定义事件以及将事件侦听器放在哪里。 这是我的倒计时元素:
class extends HTMLElement {
constructor () {
super()
this.attachShadow({ mode: 'open' })
.appendChild(template.content.cloneNode(true))
this._div = this.shadowRoot.querySelector('div')
}
timer (limit = 20) {
let startingTime = limit
const timer = this.shadowRoot.querySelector('#timer')
setInterval(updateInterval, 1000)
function updateInterval () {
if (startingTime >= 0) {
const seconds = startingTime % 60
timer.textContent = `00:${seconds}`
startingTime--
} else { timer.textContent = '00:0' }
}
}
connectedCallback () {
this.timer()
}
})
这就是我所说的倒计时元素:
customElements.define('quiz-questions',
class extends HTMLElement {
constructor () {
super()
this.attachShadow({ mode: 'open' })
.appendChild(template.content.cloneNode(true))
this._div = this.shadowRoot.querySelector('div')
this._p = this.shadowRoot.querySelector('p')
this._submit = this.shadowRoot.querySelector('#submit')
this.result = []
}
timer (limit = 20) {
const timer = document.createElement('countdown-timer')
this._div.appendChild(timer)
timer.timer(limit)
}
connectedCallback () {
this.timer()
}
})
```
【问题讨论】:
-
"我在另一个自定义元素中调用我的自定义元素" - 请同时发布该代码。这是您应该安装事件侦听器的地方。您发布的计时器类只需要创建和调度事件。
-
我希望我对帖子所做的更改足够清楚,否则请告诉我。
-
如果您只需要在计时器到达 0 时运行一些代码,为什么不在
else { timer.textContent = '00:0' }块内调用该代码?