倒計(jì)時(shí)

今天開需求評(píng)審會(huì),看原型文檔里面有一板塊是一個(gè)天:時(shí):分:秒的倒計(jì)時(shí)。開完會(huì)睦授,去項(xiàng)目的模塊里看了看院崇,WTF,居然沒有倒計(jì)時(shí)的模塊,那只有自己寫一個(gè)了闲询。
首先久免,后臺(tái)返回的是以毫秒為單位的時(shí)間,那來看思路=>
假如扭弧,現(xiàn)在有一時(shí)間段是1234567899ms阎姥。
換算一下:1234567899ms == 1234567.899s。這里我們可以把0.899s省去鸽捻,先保留整數(shù)來換算呼巴,稍后再來處理0.899s
以下是換算過程:
1234567/60 => 20576分+7秒
20576/60 => 342小時(shí)+56分
342/24 => 14天 + 6小時(shí)
經(jīng)過以上換算過程御蒲,根據(jù)倒計(jì)時(shí)格式衣赶,對(duì)應(yīng)的就是14天:6小時(shí):56分:7秒,在這個(gè)基礎(chǔ)上厚满,一秒一秒的往下走府瞄,也就是1234567依次--,直到0碘箍;
返回來說剩余的0.899s,受到iphone上秒表的啟發(fā)遵馆,毫秒部分的倒計(jì)時(shí)是以兩位來進(jìn)行的,如下圖:

WechatIMG780.png

毫秒位是從0到99敲街,也就是每1毫秒加1团搞,直到增加到99,然后進(jìn)位多艇,秒數(shù)加1逻恐,所以按照這個(gè)原理,我們可以把多余的0.899s保留兩位小數(shù)峻黍,也就是0.899.toFixed(2) => 0.90复隆,這里換算出來的就是四舍五入以后的值,然后取小數(shù)點(diǎn)后的值姆涩,也就是90挽拂。
在倒計(jì)時(shí)進(jìn)行前,先把0.90s消耗完骨饿,也就是以每1毫秒減1的速度從90減到0亏栈,然后再運(yùn)行倒計(jì)時(shí)台腥。所以,在這個(gè)思路中绒北,有兩個(gè)倒計(jì)時(shí)黎侈,一個(gè)是消耗0.90s的倒計(jì)時(shí),一個(gè)是咱們需要展示在頁面上的倒計(jì)時(shí)闷游。

以下是全部代碼峻汉。

<!DOCTYPE html>
<html>
<head>
  
</head>
<body>
        
            <div id='countDown'></div>
</body>
<script>
        
       function TimeDown(ele,opt,cb){
         ele = ele.indexOf('#') == 0?document.getElementById(ele.replace('#','')):(ele.indexOf('.') == 0?document.getElementsByClassName(ele.replace('.',''))[0]:console.error('ele is classname or id'))
         var tt = this;
         var TD = {
            dealToPend:function(s,ele){
                var sa = s.split(':');
                var sal = sa.length;
                var st = '';
                for(var i=0;i<sal;i++){
                    sa[i] = sa[i].toString().length == 1?'0'+sa[i]:sa[i];
                    st+=sa[i]+':';
                }
                 ele.innerHTML = st.substring(0,st.length-1);
            },
            dd:function(int){
                var dd  = Math.floor(Math.floor(Math.floor(int/60)/60)/24);
                    var hh =  Math.floor(Math.floor(int/60)/60)%24;
                    var mm = Math.floor(int/60)%60;
                    var ss = int%60;
                    return dd+':'+hh+':'+mm+':'+ss;
            },
            hh:function(int){
                var hh = Math.floor(int/60/60);
                    var mm = Math.floor(int/60)%60;
                    var ss = int%60;
                    return hh+':'+mm+':'+ss;
            },
            mm:function(int){
                var mm = Math.floor(int/60);
                    var ss = int%60;
                    return mm+':'+ss;
            }
         }
         tt.time = Math.floor(tt/1000);
         tt.f = '';
         tt.dealInt = function(int){
            var tdt = setInterval(function(){
                if(int == 1){
                    clearInterval(tdt);
                    if(cb){
                        cb();
                    }
                    return;
                }
                int--;
                TD.dealToPend(TD[opt](int),ele);
            },1000)
         }
         tt.dealFloat = function(float,int){
             var fdt = setInterval(function(){
                if(float == 0){
                    clearInterval(fdt);
                    tt.dealInt(int);
                }
                float--;
            },1)
         }
         tt.dealFloatms = function(){
             tt.f = (tt/1000-tt.time).toFixed(2)*100;
                 tt.dealFloat(tt.f,tt.time);
         }
         //避免page load出現(xiàn)短暫空白時(shí)間
         TD.dealToPend(TD[opt](tt.time),ele);
         //是否存在不夠一秒的情況
         tt%1000 != 0?tt.dealFloatms():tt.dealInt(tt.time);
    }
    Number.prototype.timedown = TimeDown;
   
    var differ = new Date('2018-05-16 24:00').getTime() - new Date().getTime();
    var fn = function(){
            document.getElementById('countDown').innerHTML = 'time is up';
    }
     //第一個(gè)參數(shù)是用于盛放倒計(jì)時(shí)元素的id或者classname
     //第二個(gè)參數(shù)是倒計(jì)時(shí)格式
        //'dd':代表 天:小時(shí):分:秒
        //'hh':代表 小時(shí):分:秒
        //'mm':代表 分:秒
        //目前只支持以上三種格式
     //第三個(gè)參數(shù)是倒計(jì)時(shí)結(jié)束的回調(diào)
    differ.timedown('#countDown','dd',fn);

</script>
</html>

這其中可能有不到1毫秒的誤差,甚至不到0.01毫秒脐往,因?yàn)樵趕etInterval和setTimeout兩個(gè)方法中休吠,只有執(zhí)行次數(shù)到千萬甚至億級(jí)別,才有不到1毫秒的誤差业簿,所以誤差在0.01毫秒級(jí)別的可以省略瘤礁。感興趣的可以用time和timeEnd試一試。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梅尤,一起剝皮案震驚了整個(gè)濱河市蔚携,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌克饶,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件誊辉,死亡現(xiàn)場(chǎng)離奇詭異矾湃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)堕澄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門邀跃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛙紫,你說我怎么就攤上這事拍屑。” “怎么了坑傅?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵僵驰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我唁毒,道長(zhǎng)蒜茴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任浆西,我火速辦了婚禮粉私,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘近零。我一直安慰自己诺核,他們只是感情好抄肖,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窖杀,像睡著了一般漓摩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陈瘦,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天幌甘,我揣著相機(jī)與錄音,去河邊找鬼痊项。 笑死锅风,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鞍泉。 我是一名探鬼主播皱埠,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼咖驮!你這毒婦竟也來了边器?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤托修,失蹤者是張志新(化名)和其女友劉穎忘巧,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體睦刃,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡砚嘴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涩拙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片际长。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖兴泥,靈堂內(nèi)的尸體忽然破棺而出工育,到底是詐尸還是另有隱情,我是刑警寧澤搓彻,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布如绸,位于F島的核電站,受9級(jí)特大地震影響旭贬,放射性物質(zhì)發(fā)生泄漏竭沫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一骑篙、第九天 我趴在偏房一處隱蔽的房頂上張望蜕提。 院中可真熱鬧,春花似錦靶端、人聲如沸谎势。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脏榆。三九已至猖毫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間须喂,已是汗流浹背吁断。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坞生,地道東北人仔役。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像是己,于是被迫代替她去往敵國(guó)和親又兵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容