js實(shí)現(xiàn)頁(yè)面多個(gè)日期時(shí)間倒計(jì)時(shí)效果
js的日期倒計(jì)時(shí)在日常項(xiàng)目中還是比較常用的,活動(dòng)、拼團(tuán)功能最為常見(jiàn),先分析最要是處理好日期函數(shù),然后一個(gè)頁(yè)面上有多個(gè)倒計(jì)時(shí)情況下的方法;
來(lái),先看下 拼多多 的拼單倒計(jì)時(shí)的效果:

那么,先上個(gè)代碼吧:
案例效果:

<style>
.mytime{ line-height: 40px; width: 300px; margin: 0 auto;}
</style>
<div class="mytime jsTime" data-time="2019-04-01 16:58:00">時(shí)間1</div>
<div class="mytime jsTime" data-time="2019-04-04 18:00:02">時(shí)間2</div>
<div class="mytime jsTime" data-time="2019-04-05 19:01:31">時(shí)間3</div>
<div class="mytime jsTime" data-time="2019-04-06 05:05:15">時(shí)間4</div>
<div class="mytime jsTime" data-time="2019-04-07 09:01:43">時(shí)間5</div>
<hr>
<div class="mytime jsTime2" data-time="2019-04-08 16:30:05">時(shí)間1</div>
<div class="mytime jsTime2" data-time="2019-04-09 14:01:22">時(shí)間2</div>
<div class="mytime jsTime2" data-time="2019-04-10 18:06:25">時(shí)間3</div>
<div class="mytime jsTime2" data-time="2019-04-11 22:07:19">時(shí)間4</div>
<div class="mytime jsTime2" data-time="2019-04-12 23:12:38">時(shí)間5</div>
<!-- 方法1 -->
<script>
const countdown = {
domList : document.querySelectorAll('.jsTime'),
formatNumber(n){
// return n.toString().padStart(2, '0'); // 用padStart方法要注意兼容問(wèn)題
n = n.toString();
return n[1] ? n : '0' + n;
},
setTime(dom){
//獲取設(shè)置的時(shí)間 如:2019-3-28 14:00:00 ios系統(tǒng)得加正則.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 = '拼團(tuán)已結(jié)束';
}
},
start(){
this.domList.forEach((dom) => {
this.setTime(dom);
dom.$timer = setInterval(() => {
this.setTime(dom);
}, 1e3);
});
},
};
countdown.start();
</script>
<!-- 方法2 -->
<script>
//時(shí)間格式處理
const formatNumber = n => {
n = n.toString();
return n[1] ? n : '0' + n;
};
//團(tuán)購(gòu)倒計(jì)時(shí)
const teamCountTime = (obj) => {
var timer = null;
function fn(){
//獲取設(shè)置的時(shí)間 如:2019-3-28 14:00:00 ios系統(tǒng)得加正則.replace(/\-/g, '/');
var setTime = obj.getAttribute('data-time').replace(/\-/g, '/');
//獲取當(dāng)前時(shí)間
var date = new Date(),
now = date.getTime(),
endDate = new Date(setTime),
end = endDate.getTime();
//時(shí)間差
var leftTime = end - now;
//d,h,m,s 天時(shí)分秒
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 = '拼團(tuán)已結(jié)束';
}
}
fn();
};
let jsTimes = document.querySelectorAll('.jsTime2');
jsTimes.forEach((obj) => {
teamCountTime(obj);
});
</script>
具體代碼可訪問(wèn)本人github
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js 格式化時(shí)間日期函數(shù)小結(jié)
- JavaScript實(shí)現(xiàn)字符串與日期的互相轉(zhuǎn)換及日期的格式化
- Javascript將字符串日期格式化為yyyy-mm-dd的方法
- JavaScript實(shí)現(xiàn)日期格式化的方法匯總
- js中格式化日期時(shí)間型數(shù)據(jù)函數(shù)代碼
- js實(shí)現(xiàn)日期天數(shù)、時(shí)分秒的倒計(jì)時(shí)完整代碼
- 詳解js中常規(guī)日期格式處理、月歷渲染和倒計(jì)時(shí)函數(shù)
- JavaScript日期處理之格式化與倒計(jì)時(shí)實(shí)現(xiàn)方法
相關(guān)文章
JavaScript實(shí)現(xiàn)的商品搶購(gòu)倒計(jì)時(shí)功能示例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的商品搶購(gòu)倒計(jì)時(shí)功能,可實(shí)現(xiàn)分秒級(jí)別的實(shí)時(shí)顯示倒計(jì)時(shí)效果,涉及js日期時(shí)間計(jì)算與頁(yè)面元素動(dòng)態(tài)操作相關(guān)技巧,需要的朋友可以參考下2017-04-04
基于JS實(shí)現(xiàn)視頻上傳顯示進(jìn)度條
這篇文章主要介紹了基于JS實(shí)現(xiàn)視頻上傳顯示進(jìn)度條,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
JavaScript ECMA-262-3 深入解析(二):變量對(duì)象實(shí)例詳解
這篇文章主要介紹了JavaScript ECMA-262-3變量對(duì)象,結(jié)合實(shí)例形式詳細(xì)分析了JavaScript ECMA變量對(duì)象相關(guān)概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04
JS實(shí)現(xiàn)統(tǒng)計(jì)字符串中字符出現(xiàn)個(gè)數(shù)及最大個(gè)數(shù)功能示例
這篇文章主要介紹了JS實(shí)現(xiàn)統(tǒng)計(jì)字符串中字符出現(xiàn)個(gè)數(shù)及最大個(gè)數(shù)功能,結(jié)合實(shí)例形式分析了javascript字符串遍歷、統(tǒng)計(jì)相關(guān)操作技巧,需要的朋友可以參考下2018-06-06
JavaScript實(shí)現(xiàn)獲取圖片文件真實(shí)格式的示例代碼
每種格式的圖片,都有自己特有的優(yōu)缺點(diǎn)以及數(shù)據(jù)結(jié)構(gòu),本篇博文的目的就是基于不同格式的圖像二進(jìn)制數(shù)據(jù),獲取到圖片的真實(shí)格式,感興趣的可以了解一下2023-02-02
詳解js模板引擎art template數(shù)組渲染的方法
art-template 是一個(gè)簡(jiǎn)約、超快的模板引擎。這篇文章主要介紹了詳解js模板引擎art template數(shù)組渲染的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
JavaScript實(shí)現(xiàn)點(diǎn)擊文本自動(dòng)定位到下拉框選中操作
這篇文章主要介紹了JavaScript實(shí)現(xiàn)點(diǎn)擊文本自動(dòng)定位到下拉框選中操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06

