Javascript之实现页面倒计时效果
本文将从需求实现的角度,逐步讲解如何在页面上实现倒计时效果,其中部分涉及到的知识会做拓展讲解,最后将所有代码封装,适用于不同情况下倒计时功能的实现。
效果图
一、分析需求
要实现倒计时效果,可拆解为以下三个部分进而逐个击破:
1、 使用Date方法计算对应倒计时的数据并返回
2、 利用DOM操作将得到的数据渲染到页面中
3、 通过JavaScript原生API(setInterval或setTimeout)实现倒计时效果
二、代码实现
1、 使用Date方法计算对应倒计时的数据并返回
类型1:传入具体时间对象,如2020/12/31 到 当前时间 的倒计时
function countDown(){
// 创建目标时间对象
var target_time = new Date("2020/12/31");
// 计算目标时间对象到当前时间的毫秒数
var reduce_ms = target_time.getTime() - Date.now();
// 返回需要的数据
return {
day : parseInt(reduce_ms / 1000 / 3600 / 24),
hour : parseInt(reduce_ms / 1000 / 3600 % 24),
min : parseInt(reduce_ms / 1000 / 60 % 60 ),
sec : Math.round(reduce_ms / 1000 % 60)
}
}
类型2:传入需要倒计时的具体时间,如5小时倒计时
function countDown(){
var target_time = new Date();
// 获取当前时间5小时后的目标时间对象
target_time.setHours(target_time.getHours() + 5);
// 计算目标时间对象到当前时间的毫秒数
var reduce_ms = target_time.getTime() - Date.now();
// 返回需要的数据
return {
day : parseInt(reduce_ms / 1000 / 3600 / 24),
hour : parseInt(reduce_ms / 1000 / 3600 % 24),
min : parseInt(reduce_ms / 1000 / 60 % 60 ),
sec : Math.round(reduce_ms / 1000 % 60)
}
}
问:为何要以对象的形式返回数据?
答:便于后续提取需要的数据渲染到页面中
2、 利用DOM操作将得到的数据渲染到页面中
步骤1:向HTML写入对应节点,此操作可通过 innerHTML
实现
* 为方便理解本文直接手动写入
<p>
倒计时 :
<span id="day"></span>天
<span id="hour"></span>小时
<span id="min"></span>分钟
<span id="sec"></span>秒
</p>
步骤2:将数据插入到HTML结构的对应位置
// 获取需要对应插入数据的节点
var day_ele = document.getElementById("day");
var hour_ele = document.getElementById("hour");
var min_ele = document.getElementById("min");
var sec_ele = document.getElementById("sec");
// 封装函数,当数值小于10时在前面加“0”
function addZero( num ){
if(num < 10){
return "0" + num;
}
return num;
}
// 将数据渲染到页面指定节点中
function renderCountDown(){
var res = countDown();
day_ele.innerHTML = addZero(res.day);
hour_ele.innerHTML = addZero(res.hour);
min_ele.innerHTML = addZero(res.min);
sec_ele.innerHTML = addZero(res.sec);
}
3、 通过JavaScript原生API(setInterval或setTimeout)实现倒计时效果
setInterval() 与 setTimeout() 都能实现页面倒计时,其区别在于:
setInterval() :每指定间隔时间后执行一次传入的函数,函数会多次执行
setTimeout() :等待指定时间后执行传入的函数,且只执行一次
方法1:使用setInterval()
setInterval(function(){
renderCountDown();
},1000);
// 可简写为下面这种形式
// setInterval(renderCountDown,1000);
renderCountDown()
方法2:使用setTimeout()
function renderCountDown(){
var res = countDown();
hour_ele.innerHTML = addZero(res.hour);
min_ele.innerHTML = addZero(res.min);
sec_ele.innerHTML = addZero(res.sec);
setTimeout(renderCountDown, 1000);
}
renderCountDown()
注意:
setTimeout()
只会执行一次传入的函数。故需要将其放入到渲染函数的内部,从而实现循环调用(类似于递归思想)。
三、代码封装
<p>
倒计时 :
<span id="day"></span>天
<span id="hour"></span>小时
<span id="min"></span>分钟
<span id="sec"></span>秒
</p>
<script>
// 设置变量(不同的时间传入方式)
var target_time = new Date("2020/12/31");
// var target_time = new Date();
// target_time.setHours(target_time.getHours() + 5);
// 获取需要对应插入数据的节点
var day_ele = document.getElementById("day");
var hour_ele = document.getElementById("hour");
var min_ele = document.getElementById("min");
var sec_ele = document.getElementById("sec");
// 获取目标时间到当前时间的毫秒数,进行计算并返回结果
function countDown(){
var reduce_ms = target_time.getTime() - Date.now();
return {
day : parseInt(reduce_ms / 1000 / 3600 / 24),
hour : parseInt(reduce_ms / 1000 / 3600),
min : parseInt(reduce_ms / 1000 / 60 % 60 ),
sec : Math.round(reduce_ms / 1000 % 60)
}
}
// 将数据渲染到页面指定节点中
function renderCountDown(){
var res = countDown();
day_ele.innerHTML = addZero(res.day);
hour_ele.innerHTML = addZero(res.hour);
min_ele.innerHTML = addZero(res.min);
sec_ele.innerHTML = addZero(res.sec);
}
// 封装函数,当数值小于10时在前面加“0”
function addZero( num ){
if(num < 10){
return "0" + num;
}
return num;
}
// 实现倒计时效果
setTimeout(renderCountDown,1000);
renderCountDown()
</script>
Javascript之实现页面倒计时效果的更多相关文章
- 二、JavaScript语言--JS实践--倒计时效果
主要内容:分析不同倒计时效果的计算思路及方法,掌握日期对象Date,获取时间的方法,计算时差的方法,实现不同的倒时计效果. Javascript 日期对象: Date()返回当前的日期和时间 getY ...
- 超实用的JavaScript代码段 Item1 --倒计时效果
现今团购网.电商网.门户网等,常使用时间记录重要的时刻,如时间显示.倒计时差.限时抢购等,本文分析不同倒计时效果的计算思路及方法,掌握日期对象Date,获取时间的方法,计算时差的方法,实现不同的倒时计 ...
- [JavaScript]常用的页面倒计时
倒计时是web开发中比较常用的,以下列出常用的几个倒计时方法,仅供参考: 一 :页面倒计时 原理一般都是通过 setTimeout 或 setInterval 函数实现,下面是一个最简单的倒计时 &l ...
- JQuery模仿淘宝天猫魔盒抢购页面倒计时效果
1.效果及功能说明 通过对时间的控制来告诉用户一个活动还剩多少时间,精确到秒.2.实现原理 首先定义活动的截至的时间,要重年份精确到毫秒,在获得当前的年份到秒钟,在用截至时间,减去现在的时间,剩下的还 ...
- jQuery实现的手机发送验证码倒计时效果代码分享
这是一款基于jquery实现的手机发送验证码倒计时效果代码,可实现实时显示秒数倒计时的功能,还可实现对手机号码格式验证的功能,是一款常用的网站注册发送手机验证码特效代码. 效果描述:注册一个网站,当需 ...
- 页面倒计时跳转页面效果,js倒计时效果
页面倒计时跳转页面效果,js倒计时效果 >>>>>>>>>>>>>>>>>>>> ...
- javascript特效实现(4)——当前时间和倒计时效果
这个效果的实现关键是对Date对象和setTimeout的使用. 一共有三个例子,HTML结构如下,就不添加CSS样式了. <body> 当前时间:<p id="p1&qu ...
- 超实用的JavaScript代码段 --倒计时效果
现今团购网.电商网.门户网等,常使用时间记录重要的时刻,如时间显示.倒计时差.限时抢购等,本文分析不同倒计时效果的计算思路及方法,掌握日期对象Date,获取时间的方法,计算时差的方法,实现不同的倒时计 ...
- Javascript 实现倒计时效果
代码来自于网上. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
随机推荐
- 关于排序原生js实现
内外排序的区别 排序可以分为两种:内排序和外排序.当数据量不算太大的时候,计算可以在内存中完成的排序称为内排序.当数据量特别大,计算的数据,需要分多次进入内存中进行计算的排序称之为外排序 插入排序 直 ...
- webpack的基本配置(初识)
webpack能根据模块的依赖关系递归地构建一个依赖关系图,当中包含了应用程序所需要的所有模块,最后打包成一个或多个bundle.它有四个核心概念entry.output .loader.plugin ...
- Python Type Hint类型注解
原文地址:https://realpython.com/python-type-checking/ 在本指南中,你将了解Python类型检查.传统上,Python解释器以灵活但隐式的方式处理类型.Py ...
- iNeuOS工业互联平台,.NETCore开发的视频服务组件iNeuVideo,RTSP转WebSocket
目 录 1. 概述... 2 2. 将来集成到iNeuOS平台演示... 3 3. iNeuVideo结构... 3 4. iNeuVideo部署及 ...
- idea使用Tomcat部署war 和 war exploded的区别
war模式:将WEB工程一包的形式上传到服务器中.war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器.解析:war 模式这种可以称为是发布模式(完整的项目),将项目打成war ...
- 细说集群技术(Cluster)
今天本人给大家讲解一些我对集群技术一个理解,如有不对的或者讲的不好的可以多多提出,我会进行相应的更改,先提前感谢提出意见的各位了!!! 集群(Cluster)技术:通过此可以用较低的成本获取较高的性能 ...
- Eureka在有虚拟网卡的情况下获取正确的IP
发现问题 最近项目在Eureka注册时,发现一个问题:注册的IP地址不是 192.168.0.XXX 的网络IP,而是另外一个网段的地址,如图 通过 ipconfig 命令查看本机的IP地址发现,该I ...
- javascript中的中介者模式——迪米特法则
”迪米特法则“——最少知识原则,不和陌生人说话,就是说,一个对象应当对其他对象有尽可能少的了解.talk only to your immediate friends.初衷是:降低对象之间的耦合度. ...
- Python编程 从入门到实践-3列表下
笔记出处(学习UP主视频记录) https://www.bilibili.com/video/av35698354?p=5 3.2.3 从列表中删除元素-使用del语句删除元素 motorcycles ...
- nginx显示静态html爆502 bad gateway的错误提示
在centos的服务器上,没有启动php-fcgi. 本来是想设置显示一个静态文件目录的,用不着php,于是就关闭了php-fcgi. 结果打开爆了一个大大的nginx502 bad gateway的 ...