限时抢购倒计时效果
HTML:
<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>
JS:
1 <!-- 方法1 --> 2 <script> 3 const countdown = { 4 domList : document.querySelectorAll('.jsTime'), 5 formatNumber(n){ 6 // return n.toString().padStart(2, '0'); // 用padStart方法要注意兼容问题 7 n = n.toString(); 8 return n[1] ? n : '0' + n; 9 }, 10 setTime(dom){ 11 //获取设置的时间 如:2019-3-28 14:00:00 ios系统得加正则.replace(/\-/g, '/'); 12 const leftTime = new Date(dom.getAttribute('data-time').replace(/\-/g, '/')) - new Date(); 13 if (leftTime >= 0) { 14 const d = Math.floor(leftTime / 1000 / 60 / 60 / 24); 15 const h = Math.floor(leftTime / 1000 / 60 / 60 % 24); 16 const m = Math.floor(leftTime / 1000 / 60 % 60); 17 const s = Math.floor(leftTime / 1000 % 60); 18 dom.innerHTML = `剩余${ d > 0 ? d + '天' : '' }${ [h, m, s].map(this.formatNumber).join(':') }`; 19 } else { 20 clearInterval(dom.$timer); 21 dom.innerHTML = '拼团已结束'; 22 } 23 }, 24 start(){ 25 this.domList.forEach((dom) => { 26 this.setTime(dom); 27 dom.$timer = setInterval(() => { 28 this.setTime(dom); 29 }, 1e3); 30 }); 31 }, 32 }; 33 countdown.start(); 34 </script>
1 <!-- 方法2 --> 2 <script> 3 //时间格式处理 4 const formatNumber = n => { 5 n = n.toString(); 6 return n[1] ? n : '0' + n; 7 }; 8 //团购倒计时 9 const teamCountTime = (obj) => { 10 var timer = null; 11 function fn(){ 12 //获取设置的时间 如:2019-3-28 14:00:00 ios系统得加正则.replace(/\-/g, '/'); 13 var setTime = obj.getAttribute('data-time').replace(/\-/g, '/'); 14 //获取当前时间 15 var date = new Date(), 16 now = date.getTime(), 17 endDate = new Date(setTime), 18 end = endDate.getTime(); 19 //时间差 20 var leftTime = end - now; 21 //d,h,m,s 天时分秒 22 var d, h,m,s; 23 var otime = ''; 24 if (leftTime >= 0) { 25 d = Math.floor(leftTime / 1000 / 60 / 60 / 24); 26 h = Math.floor(leftTime / 1000 / 60 / 60 % 24); 27 m = Math.floor(leftTime / 1000 / 60 % 60); 28 s = Math.floor(leftTime / 1000 % 60); 29 if (d <= 0) { 30 otime = [h, m, s].map(formatNumber).join(':'); 31 } else { 32 otime = d + '天' + [h, m, s].map(formatNumber).join(':'); 33 } 34 obj.innerHTML = '剩余' + otime; 35 // 36 timer = setTimeout(fn, 1e3); 37 } else { 38 clearTimeout(timer); 39 obj.innerHTML = '拼团已结束'; 40 } 41 } 42 fn(); 43 }; 44 let jsTimes = document.querySelectorAll('.jsTime2'); 45 jsTimes.forEach((obj) => { 46 teamCountTime(obj); 47 }); 48 </script>
效果:
原文地址:https://blog.****.net/weixin_42211816/article/details/88871407