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 相关文章推荐
ExtJS TabPanel beforeremove beforeclose使用说明
Mar 31 Javascript
jquery DOM操作 基于命令改变页面
May 06 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
May 20 Javascript
Vue中之nextTick函数源码分析详解
Oct 17 Javascript
js+html获取系统当前时间
Nov 10 Javascript
vue内置指令详解
Apr 03 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
Jun 11 Javascript
Vue 路由 过渡动效 数据获取方法
Jul 31 Javascript
vue-router传递参数的几种方式实例详解
Nov 13 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
Apr 11 Javascript
JS代码简洁方式之函数方法详解
Jul 28 Javascript
Vue Element校验validate的实例
Sep 21 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 操作符与控制结构
2012/03/07 PHP
php实现读取超大文件的方法
2014/07/28 PHP
php实现无限级分类
2014/12/24 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
使一个函数作为另外一个函数的参数来运行的javascript代码
2007/08/13 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
Jquery Validate 正则表达式实用验证代码大全
2013/08/23 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
微信小程序 图片上传实例详解
2017/05/05 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
JS中用EL表达式获取上下文参数值的方法
2018/03/28 Javascript
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
JS面向对象编程实现的Tab选项卡案例详解
2020/03/03 Javascript
python实现的udp协议Server和Client代码实例
2014/06/04 Python
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
Python matplotlib画图实例之绘制拥有彩条的图表
2017/12/28 Python
python3 unicode列表转换为中文的实例
2018/10/26 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
用python做游戏的细节详解
2019/06/25 Python
django数据关系一对多、多对多模型、自关联的建立
2019/07/24 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
梅西百货官网:Macy’s
2020/08/04 全球购物
super关键字的用法
2012/04/10 面试题
大学生工作求职信
2014/06/23 职场文书
政风行风整改方案
2014/10/25 职场文书
基层工作经历证明
2015/06/19 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书