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 相关文章推荐
Jquery uploadify图片上传插件无法上传的解决方法
Dec 16 Javascript
Script标签与访问HTML页面详解
Jan 10 Javascript
jQuery中delegate和on的用法与区别详细解析
Jan 26 Javascript
jQuery函数的第二个参数获取指定上下文中的DOM元素
May 19 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
Jun 17 Javascript
JS随机洗牌算法之数组随机排序
Mar 23 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
Sep 05 Javascript
Bootstrap警告框(Alert)插件使用方法
Mar 21 Javascript
深入浅出webpack之externals的使用
Dec 04 Javascript
vue 做移动端微信公众号采坑经验记录
Apr 26 Javascript
VUE 配置vue-devtools调试工具及安装方法
Sep 30 Javascript
vue使用自定义指令实现拖拽
Jan 29 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实现AES256加密算法实例
2014/09/22 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
Symfony控制层深入详解
2016/03/17 PHP
33个优秀的 jQuery 图片展示插件分享
2012/03/14 Javascript
javascript中怎么做对象的类型判断
2013/11/11 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
几种tab切换详解
2017/02/03 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
2018/09/06 jQuery
js根据json数据中的某一个属性来给数据分组的方法
2018/10/08 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
jquery实现下载图片功能
2019/07/18 jQuery
[51:06]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第二场 1月26日
2021/03/11 DOTA
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
2018/06/19 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
Python 使用type来定义类的实现
2019/11/19 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
土木工程建筑专业毕业生求职信
2013/10/21 职场文书
职称评定自我鉴定
2014/03/18 职场文书
学校校庆演讲稿
2014/05/22 职场文书
宣传口号大全
2014/06/16 职场文书
婚庆公司开业主持词
2015/06/30 职场文书
vue使用节流函数的踩坑实例指南
2021/05/20 Vue.js
Python源码解析之List
2021/05/21 Python
PHP遍历数组的6种方式总结
2021/11/17 PHP
Python实现文字pdf转换图片pdf效果
2022/04/03 Python