js实现页面多个日期时间倒计时效果


Posted in Javascript onJune 20, 2019

js的日期倒计时在日常项目中还是比较常用的,活动、拼团功能最为常见,先分析最要是处理好日期函数,然后一个页面上有多个倒计时情况下的方法;

来,先看下 拼多多 的拼单倒计时的效果:

js实现页面多个日期时间倒计时效果

那么,先上个代码吧:

案例效果:

js实现页面多个日期时间倒计时效果

<style>
  .mytime{ line-height: 40px; width: 300px; margin: 0 auto;}
 </style>

<div class="mytime jsTime" data-time="2019-04-01 16:58:00">时间1</div>
<div class="mytime jsTime" data-time="2019-04-04 18:00:02">时间2</div>
<div class="mytime jsTime" data-time="2019-04-05 19:01:31">时间3</div>
<div class="mytime jsTime" data-time="2019-04-06 05:05:15">时间4</div>
<div class="mytime jsTime" data-time="2019-04-07 09:01:43">时间5</div>
<hr>
<div class="mytime jsTime2" data-time="2019-04-08 16:30:05">时间1</div>
<div class="mytime jsTime2" data-time="2019-04-09 14:01:22">时间2</div>
<div class="mytime jsTime2" data-time="2019-04-10 18:06:25">时间3</div>
<div class="mytime jsTime2" data-time="2019-04-11 22:07:19">时间4</div>
<div class="mytime jsTime2" data-time="2019-04-12 23:12:38">时间5</div>
<!-- 方法1 -->
<script>
 const countdown = {
  domList : document.querySelectorAll('.jsTime'),
  formatNumber(n){
   // return n.toString().padStart(2, '0'); // 用padStart方法要注意兼容问题
   n = n.toString();
   return n[1] ? n : '0' + n;
  },
  setTime(dom){
   //获取设置的时间 如:2019-3-28 14:00:00 ios系统得加正则.replace(/\-/g, '/');
   const leftTime = new Date(dom.getAttribute('data-time').replace(/\-/g, '/')) - new Date();
   if (leftTime >= 0) {
    const d = Math.floor(leftTime / 1000 / 60 / 60 / 24);
    const h = Math.floor(leftTime / 1000 / 60 / 60 % 24);
    const m = Math.floor(leftTime / 1000 / 60 % 60);
    const s = Math.floor(leftTime / 1000 % 60);
    dom.innerHTML = `剩余${ d > 0 ? d + '天' : '' }${ [h, m, s].map(this.formatNumber).join(':') }`;
   } else {
    clearInterval(dom.$timer);
    dom.innerHTML = '拼团已结束';
   }
  },
  start(){
   this.domList.forEach((dom) => {
    this.setTime(dom);
    dom.$timer = setInterval(() => {
     this.setTime(dom);
    }, 1e3);
   });
  },
 };
 countdown.start();
</script>
<!-- 方法2 -->
<script>
 //时间格式处理
 const formatNumber = n => {
 n = n.toString();
 return n[1] ? n : '0' + n;
 };
 //团购倒计时
 const teamCountTime = (obj) => {
 var timer = null;
 function fn(){
  //获取设置的时间 如:2019-3-28 14:00:00 ios系统得加正则.replace(/\-/g, '/');
  var setTime = obj.getAttribute('data-time').replace(/\-/g, '/');
  //获取当前时间
  var date = new Date(),
   now  = date.getTime(),
   endDate = new Date(setTime),
   end  = endDate.getTime();
  //时间差
  var leftTime = end - now;
  //d,h,m,s 天时分秒
  var d, h,m,s;
  var otime = '';
  if (leftTime >= 0) {
  d = Math.floor(leftTime / 1000 / 60 / 60 / 24);
  h = Math.floor(leftTime / 1000 / 60 / 60 % 24);
  m = Math.floor(leftTime / 1000 / 60 % 60);
  s = Math.floor(leftTime / 1000 % 60);
  if (d <= 0) {
   otime = [h, m, s].map(formatNumber).join(':');
  } else {
   otime = d + '天' + [h, m, s].map(formatNumber).join(':');
  }
  obj.innerHTML = '剩余' + otime;
  //
  timer = setTimeout(fn, 1e3);
  } else {
  clearTimeout(timer);
  obj.innerHTML = '拼团已结束';
  }
 }
 fn();
 };
 let jsTimes = document.querySelectorAll('.jsTime2');
 jsTimes.forEach((obj) => {
 teamCountTime(obj);
 });
</script>

具体代码可访问本人github

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
List Information About the Binary Files Used by an Application
Jun 11 Javascript
给Function做的OOP扩展
May 07 Javascript
js防止表单重复提交实现代码
Sep 05 Javascript
jQuery ajax(复习)—Baidu ajax request分离版
Jan 24 Javascript
往光标所在位置插入值的js代码
Sep 22 Javascript
js控制iframe的高度/宽度让其自适应内容
Apr 09 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
May 27 Javascript
简单介绍JavaScript数据类型之隐式类型转换
Dec 28 Javascript
JavaScript学习笔记整理之引用类型
Jan 22 Javascript
详解Vue-基本标签和自定义控件
Mar 24 Javascript
使用Require.js封装原生js轮播图的实现代码
Jun 15 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
Dec 06 Javascript
vue实现绑定事件的方法实例代码详解
Jun 20 #Javascript
javascript实现5秒倒计时并跳转功能
Jun 20 #Javascript
JS实现的简单tab切换功能完整示例
Jun 20 #Javascript
Vue 页面权限控制和登陆验证功能的实例代码
Jun 20 #Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
Jun 20 #jQuery
javascript获取select值的方法完整实例
Jun 20 #Javascript
node基于async/await对mysql进行封装
Jun 20 #Javascript
You might like
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
2016/05/06 PHP
PHP单链表的实现代码
2016/07/05 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
javascript 类定义的4种方法
2009/09/12 Javascript
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
JS常见问题整理(持续更新)
2013/08/06 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
node.js文件上传重命名以及移动位置的示例代码
2018/01/19 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
JS实现百度网盘任意文件强制下载功能
2018/08/31 Javascript
vue中引入第三方字体文件的方法示例
2018/12/17 Javascript
使用Vue.js 和Chart.js制作绚丽多彩的图表
2019/06/15 Javascript
python根据路径导入模块的方法
2014/09/30 Python
python OpenCV学习笔记实现二维直方图
2018/02/08 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
利用CSS3的flexbox实现水平垂直居中与三列等高布局
2016/09/12 HTML / CSS
党员的自我评价范文
2014/01/02 职场文书
会计出纳员的自我评价
2014/01/15 职场文书
新学期校长寄语
2014/01/18 职场文书
拔河比赛口号
2014/06/10 职场文书
人力资源管理专业求职信
2014/07/23 职场文书
关于感恩的演讲稿800字
2014/08/26 职场文书
设备收款委托书范本
2014/10/02 职场文书
仓库管理员岗位职责
2015/02/03 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
2016公务员年度考核评语
2015/12/01 职场文书
2016读书月活动心得体会
2016/01/14 职场文书
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python
Vue的过滤器你真了解吗
2022/02/24 Vue.js
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技