本文将从需求实现的角度,逐步讲解如何在页面上实现倒计时效果,其中部分涉及到的知识会做拓展讲解,最后将所有代码封装,适用于不同情况下倒计时功能的实现。


效果图


一、分析需求

要实现倒计时效果,可拆解为以下三个部分进而逐个击破:

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之实现页面倒计时效果的更多相关文章

  1. 二、JavaScript语言--JS实践--倒计时效果

    主要内容:分析不同倒计时效果的计算思路及方法,掌握日期对象Date,获取时间的方法,计算时差的方法,实现不同的倒时计效果. Javascript 日期对象: Date()返回当前的日期和时间 getY ...

  2. 超实用的JavaScript代码段 Item1 --倒计时效果

    现今团购网.电商网.门户网等,常使用时间记录重要的时刻,如时间显示.倒计时差.限时抢购等,本文分析不同倒计时效果的计算思路及方法,掌握日期对象Date,获取时间的方法,计算时差的方法,实现不同的倒时计 ...

  3. [JavaScript]常用的页面倒计时

    倒计时是web开发中比较常用的,以下列出常用的几个倒计时方法,仅供参考: 一 :页面倒计时 原理一般都是通过 setTimeout 或 setInterval 函数实现,下面是一个最简单的倒计时 &l ...

  4. JQuery模仿淘宝天猫魔盒抢购页面倒计时效果

    1.效果及功能说明 通过对时间的控制来告诉用户一个活动还剩多少时间,精确到秒.2.实现原理 首先定义活动的截至的时间,要重年份精确到毫秒,在获得当前的年份到秒钟,在用截至时间,减去现在的时间,剩下的还 ...

  5. jQuery实现的手机发送验证码倒计时效果代码分享

    这是一款基于jquery实现的手机发送验证码倒计时效果代码,可实现实时显示秒数倒计时的功能,还可实现对手机号码格式验证的功能,是一款常用的网站注册发送手机验证码特效代码. 效果描述:注册一个网站,当需 ...

  6. 页面倒计时跳转页面效果,js倒计时效果

    页面倒计时跳转页面效果,js倒计时效果 >>>>>>>>>>>>>>>>>>>> ...

  7. javascript特效实现(4)——当前时间和倒计时效果

    这个效果的实现关键是对Date对象和setTimeout的使用. 一共有三个例子,HTML结构如下,就不添加CSS样式了. <body> 当前时间:<p id="p1&qu ...

  8. 超实用的JavaScript代码段 --倒计时效果

    现今团购网.电商网.门户网等,常使用时间记录重要的时刻,如时间显示.倒计时差.限时抢购等,本文分析不同倒计时效果的计算思路及方法,掌握日期对象Date,获取时间的方法,计算时差的方法,实现不同的倒时计 ...

  9. Javascript 实现倒计时效果

    代码来自于网上. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...

随机推荐

  1. RocketMQ集群平滑下线或重启某个节点

    1.现状描述 集群其中一台物理机未知原因导致单用户无法登陆机器,该物理机需要重启修改密码或者重装系统.该台为master节点,运行正常.配置策略为: 异步刷盘 主从异步复制 如果直接下线该master ...

  2. 干了这碗蛋炒饭 继续APP性能提升

    [前言] 什么是做功能,功能就是客户要一碗蛋炒饭,然后做了给他. 我想谁都明白,一家餐厅能活下去,是因为能把食材料理好,客户喜欢. 更准确的说,一家餐厅能活得下去,要考虑用户需求.食材,然后就是料理水 ...

  3. Python——12类的继承

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  4. C++走向远洋——67(项目二、洗牌)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  5. AWS EC2+Docker+JMeter构建分布式负载测试基础架构

    目录 概述及范围 前提条件 Part 1: Local setup-本地配置 Part 2: Cloud端基础架构--Infrastructure 总结: 原文链接 @ 概述及范围 本文介绍有关如何使 ...

  6. C与ARM汇编结合实现mini2440串口uart简单程序

    最近学完了ARM的一些基础知识,开始在mini2440上开发一些简单的程序,串口发送程序是一开始涉及多个寄存器的例子,稍有繁多的步骤应该是开发过程中要慢慢适应的境况 下面的程序的目的是实现mini24 ...

  7. Flex实现九宫格

    写一个靠谱的flex布局 <!DOCTYPE html> <html> <style> .block { padding-top: 30%; margin-top: ...

  8. Python-Requests库的安装和调用

    #使用pip或者pip3安装requests库pip3 install requests #requests库:python #输入python进入命令行模式在cmd命令行中依次运行以下代码,或者直接 ...

  9. apache搭建Tomcat集群(Cluster)

    搭建集群: apache:特点处理静态资源(html  图片  js等) apache的请求操作,Cluster工具 tomcat:特点处理动态资源 apache+tomcat(apache是web服 ...

  10. Windows下安装虚拟机

    一.准备工作 1.下载centos7操作系统 阿里巴巴站点: http://mirrors.aliyun.com/centos/7/isos/x86_64/ 2.下载VMware虚假机 可以直接通过3 ...