js和vue实现时分秒倒计时的方法

boyanx8个月前技术教程24

我们平常浏览网页的时候,经常见到“距游戏公测1天2小时3分钟4秒”这样的倒计时器。像切图网qietu.com经常就遇到要做倒计时的效果,干脆记录下来,免得重复造轮子。

下面两个 demo 将分别用纯 JavaScript 、基于 Vue.js 的 JavaScript 实现。代码中可能包含部分 ES6 语法,但相信很容易理解。

JavaScript
创建一个 countdown 方法,用于计算并在控制台打印距目标时间的日、时、分、秒数,每隔一秒递归执行一次。

msec 是当前时间距目标时间的毫秒数,由时间戳相减得到,我们将以这个数为基础计算。我们都知道1天等于24小时,1小时等于60分钟,1分钟等于60秒,1秒等于1000毫秒。所以,msec / 1000 / 60 / 60 / 24 保留整数就是天数。如果换用 % 取余数,再保留整数后得到的就是小时数。以此类推就能算出其他所有数。

function countdown () {
// 目标日期时间戳
const end = Date.parse(new Date(‘2017-12-01’))
// 当前时间戳
const now = Date.parse(new Date())
// 相差的毫秒数
const msec = end – now
// 计算时分秒数
let day = parseInt(msec / 1000 / 60 / 60 / 24)
let hr = parseInt(msec / 1000 / 60 / 60 % 24)
let min = parseInt(msec / 1000 / 60 % 60)
let sec = parseInt(msec / 1000 % 60)
// 个位数前补零
hr = hr > 9 ? hr : ‘0’ + hr
min = min > 9 ? min : ‘0’ + min
sec = sec > 9 ? sec : ‘0’ + sec
// 控制台打印
console.log(`${day}天 ${hr}小时 ${min}分钟 ${sec}秒`)
// 一秒后递归
setTimeout(function () {
countdown()
}, 1000)
}
控制台打印结果:

27天 07小时 49分钟 10秒
27天 07小时 49分钟 09秒
27天 07小时 49分钟 08秒

Vue.js
如果单纯使用 JavaScript ,我们需要在每次计算后手动更新 DOM 元素(将数据显示给用户),既不方便又难以维护。实际项目中更多的是配合前端框架,将计算结果实时渲染到页面上。

页面结构中的数据来自 Vue 实例的 data 对象。

<div id=”app”>{{ `${day}天 ${hr}小时 ${min}分钟 ${sec}分钟` }}</div>
mounted 是 Vue 的生命周期方法,可以理解为在页面加载完毕后执行 countdown 方法。countdown 方法每隔一秒会执行一次,并将计算结果分别赋予变量 day、hr、min、sec,同时改变的还有页面上显示的内容。

new Vue({
el: ‘#app’,
data: function () {
return {
day: 0, hr: 0, min: 0, sec: 0
}
},
mounted: function () {
this.countdown()
},
methods: {
countdown: function () {
const end = Date.parse(new Date(‘2017-12-01’))
const now = Date.parse(new Date())
const msec = end – now
let day = parseInt(msec / 1000 / 60 / 60 / 24)
let hr = parseInt(msec / 1000 / 60 / 60 % 24)
let min = parseInt(msec / 1000 / 60 % 60)
let sec = parseInt(msec / 1000 % 60)
this.day = day
this.hr = hr > 9 ? hr : ‘0’ + hr
this.min = min > 9 ? min : ‘0’ + min
this.sec = sec > 9 ? sec : ‘0’ + sec
const that = this
setTimeout(function () {
that.countdown()
}, 1000)
}
}
})
相关环境:Windows 7 x64 / Vue.js 2.4.4

标签: 倒计时代码

相关文章

Python进阶-Day 10 :时间与日期处理

一、学习目标掌握 Python 中 datetime 和 time 模块的基本用法。理解时间戳、日期格式化和时间计算的相关概念。能够编写一个简单的倒计时程序,应用所学知识。二、学习内容与时间安排上午(...

再挑战,用AI助手15分钟开发倒计时工具!家长上班族必备神器

前天用Cursor结合Deepseek做了一个倒计时工具,花了30分钟,今天再挑战用Vscode+通义灵码完成。没想到仅用15分钟就完成了专业级工具开发!现将完整对话过程分享给大家,见证AI编程的神奇...

第四章 天道代码!我在三十三天暴击创世神

天道往生殿的青铜门在业火中熔化,林默踏着云灼衣的红莲穿过门扉。虚空乱流撕扯着肉身,视网膜上跳动的暴击值突然扭曲成诡谲代码:【检测到本源规则】【暴击系统升级为创世模式】苏婉清背后的光翼片片剥落,焚天凤炎...

代码情书

我缩在电竞椅里抠脚改代码的时候,绝对想不到三十秒后会和全平台最火的网红接吻。"林深!你写的破程序把夏栀直播间搞崩了!"总监的咆哮震得耳麦都在抖。我手一抖按下F5,直播间突然切到我的摄像...

《逆风奔北》黎明代码

探视室的铁门在身后重重闭合,林向宇的指尖还残留着沉香木的余温。三个月来他用食堂铝勺雕刻的十二颗木珠,此刻正在囚服口袋里相互碰撞,发出细碎的声响。走廊顶灯每隔五米就有一盏接触不良,明暗交替的光影中,他看...

《末日代码》

核战倒计时第7小时,我破解了五角大楼的量子加密文件。"阻止发射的密码是...KFC-CRAZY-THURSDAY-VME50?"实验室的警报红光中,我盯着全息投影上的乱码。太平洋深处的...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。