
JS实现倒计时功能
发布日期:2021-05-07 09:43:31
浏览次数:29
分类:原创文章
本文共 1592 字,大约阅读时间需要 5 分钟。
快到双十一了,心血来潮写了这篇博客。实现的原理比较简单,获取当前时间,与目标时间做差,然后分别计算天、小时、分钟和秒数。
原生JS实现
有两个比较关键的地方,一个是计算小时、分钟和秒数需要用到求余运算%
,另外需要用到setTimeout
每隔一秒钟进行递归调用。
示例代码如下:
function countDown() { let target_time = new Date('2020/10/07').getTime(), current_time = new Date().getTime(), diff = target_time - current_time; if(diff < 0) return; // 如果当前时间晚于deadline就直接return let day = Math.floor(diff / 1000 / 60 / 60 / 24), hour = Math.floor(diff / 1000 / 60 / 60 % 24), min = Math.floor(diff / 1000 / 60 % 60), sec = Math.floor(diff / 1000 % 60); document.getElementById('day').innerText = `${ day}天`; document.getElementById('hour').innerText = `${ hour}时`; document.getElementById('minute').innerText = `${ min}分`; document.getElementById('second').innerText = `${ sec}秒`; setTimeout(countDown, 1000); // 递归调用,结束条件是当前时间晚于deadline}
Moment.js实现
格式化时间的函数可以自己写,但是项目中比较规范的做法是调用第三方库。常用的时间处理库是Moment.js,里面有一个时长对象moment.duration
,很方便就能计算出相对时间。
import moment from 'moment'function countDown() { let m1 = moment(), m2 = moment('2019-05-07 08:20:00'); let duration = moment.duration(m2 - m1, 'ms'), dd = duration.get('days'), hh = duration.get('hours'), mm = duration.get('minutes'), ss = duration.get('seconds'); return `${ dd}天 ${ hh}时 ${ mm}分 ${ ss}秒`}
顺便一提
有的同学问为什么调用第三方库才是规范做法,我这里不解释原因,就举一个项目开发中遇到的真实案例,大家可以体会一下。
我之前开发的一个Vue项目,涉及到很多页面组件,这些组件都需要格式化时间,然后分配给十几个前端RD进行开发。由于事先没有约定,结果每个人都在自己的组件里面实现了一套格式化时间的函数,逻辑重复不说,每个人的传参的方式还都不一样,后期维护还得研究代码才能知道怎么使用,这就有点头疼了。经过这次教训,后面的项目开发中都是在mixin.js中使用Moment.js定义一个时间处理函数,然后全局注册。
参考:
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年03月30日 02时07分55秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
消息队列 RocketMQ 并发量十万级
2021-05-09
ReactJs入门教程-精华版
2021-05-09
乐观锁悲观锁应用
2021-05-09
.net Core 使用IHttpClientFactory请求
2021-05-09
多线程之旅(准备阶段)
2021-05-09
Python 之网络式编程
2021-05-09
MySql5.5安装步骤及MySql_Front视图配置
2021-05-09
mybatis #{}和${}区别
2021-05-09
Java Objects工具类重点方法使用
2021-05-09
Java内存模型(JMM)
2021-05-09
AQS相关
2021-05-09
WCF学习之旅—第三个示例之一(二十七)
2021-05-09
java ThreadPoolExecutor初探
2021-05-09
Markdown进阶
2021-05-09
快速指数算法
2021-05-09
python去除字符串中的特殊字符(爬虫存储数据时会遇到不能作为文件名的字符串)
2021-05-09