js vue中得延时器_Vue.js实现时分秒倒计时

我们平常浏览网页的时候,经常见到“距游戏公测1天2小时3分钟4秒”这样的倒计时器。时间如沙漏般一点点的减少,不仅能挑起用户的兴趣,而且让页面提升了一点逼格,还填补掉一些尴尬的空白位置。最近写得越来越多,有用没用都让加个倒计时,干脆记录下来,免得重复造轮子。

实现的方法并不复杂,关键是理解如何计算,尤其对我这种数学不好的人而言。下面两个 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 对象。

{{ `${day}天 ${hr}小时 ${min}分钟 ${sec}分钟` }}

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

标签: vue

顶一下

(0)

0%

踩一下

(0)

0%

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件的搜索

which 显示一个可执行文件的完整路径; [rootberyl ~]# which ls alias lsls --colortty /bin/ls whereis 搜索一个可执行工具及其相关配置、帮助 [rootberyl ~]# whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz find […

计算机学报和c类会议,c类及以上学术期刊_c刊就是cssci吗_ccf推荐期刊和会议目录...

吃B族维生素片有什么好处大家族经常的成员有B1、B2、B3(烟酸)、B5(泛酸)、B6、B9(叶酸)、B12(钴胺素)。它们的作用如下。1.是糖代谢过程中关键性的物质。身体的肌肉和神经所需能量主要由糖类提供,所以最易受累。VB充足,则神经细胞能量充沛&am…

WPF ListBox样式去掉默认选中效果

次用到ListBox的时候,鼠标悬浮时,ListBoxItem的默认样式太丑了,设置了ItemTemplate也不管用,像这样的:经过几次尝试后,终于解决了这个问题,记录一下,以后就不用到处百度找了。。。其…

如何简单形象又有趣地讲解神经网络是什么?

神经网络很萌的!0. 分类神经网络最重要的用途是分类,为了让大家对分类有个直观的认识,咱们先看几个例子:垃圾邮件识别:现在有一封电子邮件,把出现在里面的所有词汇提取出来,送进一个机器里&…

C#创建自定义特性

概述特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号&#xff08…

win8计算机安全模式,WIN8如何设置按F8进入安全模式

Win8/win10系统想进入安全模式就不是太容易的事了。之前的Win7和XP等系统可以通过在开机时按F8进入安全模式选择菜单。有什么方法可以设置让Win8/win10系统按F8直接进入安全模式菜单。下面学习啦小编向大家介绍让Win8/win10系统通过这种老办法按F8进入安全模式的方法&#xff0…

当你不喜欢一个人(一段话、一篇文章)的时候

为什么80%的码农都做不了架构师?>>> 我知道技术人员都喜欢争论,因为我也算半个。不过我总觉得,有些争论是没有必要存在的。因为沟通是以交流为目的的,若本身对方就不是来交流而是做宣传的,推销一种观点。那…

floatmap 二维数组_用J中的多维数组进行Arrays.fill

用J中的多维数组进行Arrays.fill如何在不使用循环的情况下用Java填充多维数组? 我试过了:double[][] arr new double[20][4];Arrays.fill(arr, 0);结果为java.lang.ArrayStoreException: java.lang.Double提前致谢!11个解决方案87 votes这是…

在程序员面前千万不要说这9句话,我一个同事就死的很惨!

最近,有几位程序员朋友,向我吐槽,经常有人和他说一些让他恼怒的话,他听完都想打人啦。我听完之后也是哭笑不得,将这些程序员朋友的话给整理出来了,大家以后在程序员面前说话可得小心点。。01“我先下班了啦…

C# WPF框架Caliburn.Micro快速搭建

1. Caliburn是什么?Caliburn是Rob Eisenberg在2009年1月26日(Robs MIX10 talk "Build Your Own MVVM Framework")提出的一个MVVM类的开源框架。它是一套用于协助开发WPF,Silverlight,WP7和Win RT等的应用程序的库。Caliburn.Micro由…

怎么可以让计算机不能联网,我想让电脑:只能收发电子邮件,不能上网,怎样设置?...

2006-01-04 14:47:58用美萍卫士就可以。全部2006-01-04 14:47:582006-01-04 13:22:37第一种全部删除 最好的方式打开系统所在目录找到 IE 的所在地全部删除然后安装放火墙,以瑞星为例子~~~找到启动~~关闭HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVers…

MYSQL技术连环斩-MYSQL简述

前言:严格的来说,MYSQL是一款产品而不是一项技术。关于技术和产品的论述,请参考我的博文。现在进行小结一下。可以说数据库技术是为了解决数据之间如何聚合,聚合的数据如何管理的问题。为了实际上的真正应用,就必须选择…

火柴人_火柴人 x THANKSGIVING

滴水之恩当涌泉相报,THANKSGIVING是我们给予对方的温暖。很多时候我们却发现,帮助我们的人其实并不求回报。也许,当我们想要感恩得到的帮助时,更应该做的,是铭记他人的善意,并努力把这份温暖传递下去。2020…

AI催生新的工作机遇:5个未来会很吃香的岗位

导读:人工智能与人类工作是当下许多人津津乐道的一个话题,而讨论的重点大多是围绕在“未来人工智能会不会抢走我们的工作”这个方面。“人工智能”一词经常会让人感觉心生恐惧和忧虑,人们畏惧人工智能所带来的未知可能性,害怕发生…

在 CAP 中使用 AOP ( Castle.DynamicProxy )

简介本篇文章主要介绍如何在 CAP 中集成使用 Castle.DynamicProxy,Castle DynamicProxy 是一个用于在运行时动态生成轻量级.NET代理的库。代理对象允许在不修改类代码的情况下截取对对象成员的调用。可以代理类和接口,但是只能拦截虚拟成员。为什么需要使…

共享服务器硬件要求,共享服务器的配置与管理.doc

编号:Q/NJXX-QR-RJ-2-2012南京信息职业技术学院教 案授课班级41421P、41422P授课时数2序号1时间地点[ ] 年[ ]月[ ] 日 [ ]节 [ ]课程单元共享服务器的配置与管理教学内容能够在Linux中访问Windows的共享资源掌握Linux中安装NFS服务的方法掌握Linux中安装Samba服务的…

Vim as Python IDE on windows

下载安装Python。 从Vim的网站下载vim,建议下Self-installing executable的版本。 编辑vim的配置文件_vimrc 拷贝vimrc_example里面的东东到_vimrc 去掉_vimrc里面的source $VIMRUNTIME/vimrc_example.vim 设置中文支持 "设置编码自动识别, 中文引号显示 "set fileen…

python中matplotlib库实例_Python Matplotlib库入门指南

Matplotlib简介Matplotlib是一个Python工具箱,用于科学计算的数据可视化。借助它,Python可以绘制如Matlab和Octave多种多样的数据图形。最初是模仿了Matlab图形命令, 但是与Matlab是相互独立的.通过Matplotlib中简单的接口可以快速的绘制2D图表初试Matpl…

分布式之数据库和缓存双写一致性方案解析!

一、为什么要写这篇文章?首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作:但是在更新缓存方面,对于更新完数据库…

四年级上册数学计算机笔记,四年级数学下册笔记整理

第一单元四则运算(1)在没有括号的算式里,如果只有加、减法或者只有乘、除法,都要从左往右按顺序计算。 (2)在没有括号的算式里,有乘、除法和加、减法,要先算乘、除法后算加、减法。 (3)在有括号的算式里,要先算括号里面…