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 相关文章推荐
JavaScript 学习小结(适合新手参考)
Jul 30 Javascript
6个DIV 135或246间隔一秒轮番显示效果
Jul 24 Javascript
jQuery初学:find()方法及children方法的区别分析
Jan 31 Javascript
各浏览器对click方法的支持差异小结
Jul 31 Javascript
js预载入和JavaScript Image()对象使用介绍
Aug 28 Javascript
javascript中Math.random()使用详解
Apr 15 Javascript
可以浮动某个物体的jquery控件用法实例
Jul 24 Javascript
AngularJS基础 ng-keypress 指令简单示例
Aug 02 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
Nov 24 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
Jul 24 Javascript
原生JS实现轮播图效果
Oct 12 Javascript
如何开发一个渐进式Web应用程序PWA
May 10 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入门学习知识点三 PHP上传
2011/07/14 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
2017/08/11 PHP
toString()一个会自动调用的方法
2010/02/08 Javascript
jQuery each()方法的使用方法
2010/03/18 Javascript
jQuery中Dom的基本操作小结
2014/01/23 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
2015/08/18 Javascript
jQuery插件jquery-barcode实现条码打印的方法
2015/11/25 Javascript
JSP防止网页刷新重复提交数据的几种方法
2016/11/19 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
Nuxt使用Vuex的方法示例
2019/09/06 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
python读取html中指定元素生成excle文件示例
2014/04/03 Python
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
python实现Adapter模式实例代码
2018/02/09 Python
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
Python 在字符串中加入变量的实例讲解
2018/05/02 Python
python 对多个csv文件分别进行处理的方法
2019/01/07 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
Python shelve模块实现解析
2019/08/28 Python
简单了解python中的与或非运算
2019/09/18 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
Python的logging模块基本用法
2020/12/24 Python
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
美国亚洲时尚和美容产品的一站式网上商店:Stylevana
2019/09/05 全球购物
企业总经理职责
2014/02/02 职场文书
中国梦我的梦演讲稿
2014/04/23 职场文书
我的小天地教学反思
2014/04/30 职场文书
安全标语口号
2014/06/09 职场文书
2014年度考核工作总结
2014/12/24 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技