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去掉空格的方法集合
Dec 28 Javascript
说明你的Javascript技术很烂的五个原因
Apr 26 Javascript
提高jQuery性能的十个诀窍
Nov 14 Javascript
基于jquery实现图片上传本地预览功能
Jan 08 Javascript
javascript的几种写法总结
Sep 30 Javascript
JavaScript获取中英文混合字符串长度的方法示例
Feb 04 Javascript
详解Webpack多环境代码打包的方法
Aug 03 Javascript
详解ESLint在Vue中的使用小结
Oct 15 Javascript
js使用swiper实现层叠轮播效果实例代码
Dec 12 Javascript
解决layui表格内文本超出隐藏的问题
Sep 12 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
Mar 14 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
Jul 15 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
根德Grundig S400/S500/S700电路分析
2021/03/02 无线电
实用函数7
2007/11/08 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
js实现checkbox全选和反选示例
2014/05/01 Javascript
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
react-router实现跳转传值的方法示例
2017/05/27 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
详解React 的几种条件渲染以及选择
2018/10/23 Javascript
layui radio点击事件实现input显示和隐藏的例子
2019/09/02 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
Python的组合模式与责任链模式编程示例
2016/02/02 Python
Python实现读取json文件到excel表
2017/11/18 Python
Pyspider中给爬虫伪造随机请求头的实例
2018/05/07 Python
Pyqt5实现英文学习词典
2019/06/24 Python
使用Windows批处理和WMI设置Python的环境变量方法
2019/08/14 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
Python使用jupyter notebook查看ipynb文件过程解析
2020/06/02 Python
如何一键升级Python所有包
2020/11/05 Python
Wiggle澳大利亚:自行车、跑步、游泳商店
2020/11/07 全球购物
高一自我鉴定
2013/12/17 职场文书
简历中个人自我评价范文
2013/12/26 职场文书
三查三看党性分析材料
2014/02/18 职场文书
春季防火方案
2014/05/10 职场文书
意向协议书
2015/01/27 职场文书
班主任高考寄语
2015/02/26 职场文书
重阳节活动主持词
2015/07/04 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书