如何知道 JavaScript 中的计时器是否被清除或超时?
好吧,非常简单的问题。我正在参加 javascript 速成课程。
如果我使用 timer = setTimeout(..., 500)
设置计时器,然后 clearTimeout(timer)
清除计时器,计时器的整数值不会改变,所以我的问题是如何知道计时器是否超时或清除?
我想使用 if (timer) {...}
,但显然正整数总是返回 true。
Ok, really simple question. I'm taking a crash course in javascript.
If I usetimer = setTimeout(..., 500)
to set a timer, and then clearTimeout(timer)
to clear the timer, the integer value of timer doesn't change, so my question is how to know if a timer is timed out or cleared?
I want to use if (timer) {...}
, but obviously a positive integer always returns true.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
如果您正在寻找更正式的东西,您可以构建封装
setTimeout
/clearTimeout
功能的 javascript 类。这样的类可能看起来像这样:
我还包含了一个
timerState
属性,它可以让您轻松确定计时器是“完成”还是“取消”。您可以这样使用它:
如果需要,您可以扩展相同的基本思想以包含附加功能(例如重复计时器、开始/停止/恢复等)
If you're looking for something more formal, you could build javascript class that encapsulates the
setTimeout
/clearTimeout
functionality.Such a class might look something like this:
I've also included a
timerState
attribute that would let you easily determine whether the timer was "completed" or "canceled".You would use it like this:
You can extend the same basic idea to include additional functionality if you need it (eg. repeating timer, start/stop/resume, etc.)
在
clearTimeout(timer)
之后将null
分配给计时器assign
null
to the timer after theclearTimeout(timer)
如果清除超时,回调将不会执行。因此,如果回调被执行,则意味着自您设置超时以来已经过去了 500 毫秒。
例如:
If you clear the timeout the callback won't be executed. So if the callback is executed it means that 500ms have passed since you've set the timeout.
For example:
这是我用于计时器事件的东西!希望这有帮助。
Here is something that I use for timer events! Hope this helps.
我一般会避免在 JS 中使用标志,但在这种情况下,它是有意义的,并且可以让事情变得美好和简单。这个想法是,一旦计时器触发,您就设置一个标志,然后您可以在代码中的其他地方检查该标志。
I avoid using flags in JS in general but this is a case where it makes sense and keeps things nice and simple. The idea is you set a flag once your timer has fired and then you can examine that elsewhere in code.