|
|
请马上登录,朋友们都在花潮里等着你哦:)
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 马黑黑 于 2022-10-10 22:34 编辑
有一需求:每到整点,执行一个任务。任务不能随便是什么,是指定的,我们假设它已经写进了一个函数,比如下面这样:
function showMsg() {
papa.innerText = Math.random();
}
这是在 papa 标签打印出一个随机数。
我们介绍过定时器 setInterval,如果用它的话,我们可以完成这么一个功能:每隔多长时间做一件事情。一个钟时间太长,不好测试,我们就假设是每隔一分钟执行一次相同的任务吧:
setInterval(function() {
showMsg();
},60000);
上面的语句也可以写成:
setInterval(showMsg, 60000);
两种写法的区别是,第一种,可以在两个花括号之间做较为复杂的事情(就是写入更多的代码),第二种,一般就一个表达式,是函数的话函数不能带括号,直接用函数名。
显然,上面两种定时器语句,都可以正常运行,运行结果是每隔一分钟就在 papa 标签显示一个随机浮点数。但这个做法,与题意不符:题意要求每到整点执行相同任务。
实现题意要求,需要用到定时器,但在使用定时器之前,还需要用到别的与日期时间相关的知识:Date() 对象。
Date() 对象是很多语言都有的基于日期时间的对象,它会提供一个时间戳接口,我们通过创建实例与之建立连接并应用它:
let d = new Date();
然后我们就可以通过已经将 Date() 对象实例化了的变量 d 来操作相关数据,例如,获取:
let sec = d.getSeconds(); // 当下的秒数 0 ~ 59
let min = d.getMinutes(); // 当下的分钟数 0 ~ 59
let hour = d.getHours(); // 当下的小时数 0 ~ 23
还有很多,我们暂时最多用到这些。
我们将以上的新东西,用到 setInterval 定时器中来。整点干事,间隔时间太长,不好测试,我们将整点改为整分。实现的代码框架是这样:
let timer = setInterval(function myFun() {
// 这里做点啥 :秒数被 60 整除就开干
}, 1000);
定时器每隔一秒钟(红色数字1000代表一秒钟)检测一次从 Date() 对象获得的时间戳那里所获取的秒数是不是被 60 整除,如果是,干活。为什么不是被 59 整除?因为,59 会被 59 和 0 整除,如果用了 59 ,则一个一分钟的时间周期里,任务会连续执行两次,而60,在现实中的一分钟里的时间戳的 getSeconds() 周期里,1 ~ 59 都不能整除它,只有 0 整除它,任务只执行一次——进入下一分钟的时候执行。
干活的代码上来吧:
let timer = setInterval(function myFun() {
let d = new Date(); //获得时间戳信息
if(d.getSeconds() % 60 === 0) { //所取的秒数取 60 的余数,等于 0 时表示进入下一分钟,则 ——
showMsg(); //执行任务
}
}, 1000);
完整代码:
<div id="papa"></div>
<script>
let timer = setInterval(function myFun() {
let d = new Date();
if(d.getSeconds() % 60 === 0) {
showMsg();
}
}, 1000);
function showMsg() {
papa.innerText = Math.random();
}
</script>
|
评分
-
| 参与人数 1 | 威望 +50 |
金钱 +100 |
经验 +50 |
收起
理由
|
红影
| + 50 |
+ 100 |
+ 50 |
赞一个! |
查看全部评分
|