【微信小程序開發(fā)】倒計時組件

今天給大家?guī)?b>微信小程序倒計時組件具體開發(fā)步驟:

先來看下最終效果:

源碼:http://download.csdn.net/download/acmdown/9931482

分步驟-性子急的朋友敛苇,可以直接看最后那段代碼。

wxml文件放個text

second: {{second}} micro second:{{micro_second}}

在js文件中調(diào)用

function countdown(that) { ?var second = that.data.second ?if (second == 0) { ? ?// console.log("Time Out...");

that.setData({

second: "Time Out..."

}); ? ?return ;

} ?var time = setTimeout(function(){

that.setData({

second: second - 1

});

countdown(that);

}

,1000)

}

Page({

data: {

second: 3

},

onLoad: function() {

countdown(this);

}

});

運行驗證下,從10走到1s瞧壮,然后顯示時間到。

于是繼續(xù)將毫秒完善,注意毫秒的步長受限于系統(tǒng)的時間頻率,于是我們精確到0.01s即10ms

js

/* 秒級倒計時 */function countdown(that) { ?var second = that.data.second ?if (second == 0) {

that.setData({

second: "Time out!",

micro_second: "micro_second too."

});

clearTimeout(micro_timer); ? ?return ;

} ?var timer = setTimeout(function(){

that.setData({

second: second - 1

});

countdown(that);

}

,1000)

}/*

毫秒級倒計時 */// 初始毫秒數(shù)供璧,同時用作歸零var micro_second_init = 100;// 當前毫秒數(shù)var

micro_second_current = micro_second_init;// 毫秒計時器var

micro_timer;function countdown4micro(that) { ?if (micro_second_current

<= 0) {

micro_second_current = micro_second_init;

}

micro_timer = setTimeout(function(){

that.setData({

micro_second: micro_second_current - 1

});

micro_second_current--;

countdown4micro(that);

}

,10)

}

Page({

data: {

second: 2,

micro_second: micro_second_init

},

onLoad: function() {

countdown(this);

countdown4micro(this);

}

});

wxml文件

second: {{second}}s{{micro_second}}

如此,當秒級運行完畢時冻记,毫秒級timer即clearTimeout睡毒,并將字本顯示為'micro_second too'

再添加一個countdown4micro方法,使得顯示剩余 0:3:19 89這樣形式的倒數(shù)

function

dateformat(second) { ? ?var dateStr = ""; ? ?var hr = Math.floor(second

/ 3600); ? ?var min = Math.floor((second - hr * 3600) / 60); ? ?var sec

= (second - hr * 3600 - min * 60);// equal to => var sec = second %

60;

dateStr = hr + ":" + min + ":" + sec; ? ?return dateStr;

}

目前有2個時鐘冗栗,影響性能演顾,合并下去掉countdown供搀,于是countdown4micro變成以下的樣子:

function countdown4micro(that) { ? ?var loop_second = Math.floor(loop_index / 100); ? ?// 得知經(jīng)歷了1s

if (cost_micro_second != loop_second) { ? ? ? ?// 賦予新值

cost_micro_second = loop_second; ? ? ? ?// 總秒數(shù)減1

total_second--;

} ? ? ?// 每隔一秒,顯示值減1; 渲染倒計時時鐘

that.setData({

clock:dateformat(total_second - 1)

}); ? ? ?if (total_second == 0) {

that.setData({ ? ? ? ? ?// micro_second: "",

clock:"時間到"

});

clearTimeout(micro_timer); ? ? ? ?return ;

}

if (micro_second_current <= 0) {

micro_second_current = micro_second_init;

}

micro_timer = setTimeout(function(){

that.setData({

micro_second: micro_second_current - 1

});

micro_second_current--; ? ?// 放在最后++偶房,不然時鐘停止時還有10毫秒剩余

loop_index ++;

countdown4micro(that);

}

,10)

}

如此這般趁曼,毫秒與時分秒是分別運行渲染的军浆,再次改造棕洋,程序可讀性更好。dateformat針對于毫秒操作乒融,而不接受秒為數(shù)掰盘。同時還省卻了計算100次為1s的運算

/**

* 需要一個目標日期,初始化時赞季,先得出到當前時間還有剩余多少秒

* 1.將秒數(shù)換成格式化輸出為XX天XX小時XX分鐘XX秒 XX

* 2.提供一個時鐘愧捕,每10ms運行一次,渲染時鐘申钩,再總ms數(shù)自減10

* 3.剩余的秒次為零時次绘,return,給出tips提示說撒遣,已經(jīng)截止

*/// 定義一個總毫秒數(shù)邮偎,以一分鐘為例。TODO义黎,傳入一個時間點禾进,轉(zhuǎn)換成總毫秒數(shù)var total_micro_second = 2 *

1000;/* 毫秒級倒計時 */function countdown(that) { ? ? ?// 渲染倒計時時鐘

that.setData({

clock:dateformat(total_micro_second)

}); ? ? ?if (total_micro_second <= 0) {

that.setData({

clock:"已經(jīng)截止"

}); ? ? ? ? ?// timeout則跳出遞歸

return ;

}

setTimeout(function(){ ? ? ? ?// 放在最后--

total_micro_second -= 10;

countdown(that);

}

,10)

}// 時間格式化輸出,如3:25:19 86廉涕。每10ms都會調(diào)用一次function dateformat(micro_second) { ? ? ?// 秒數(shù)

var second = Math.floor(micro_second / 1000); ? ? ?// 小時位

var hr = Math.floor(second / 3600); ? ? ?// 分鐘位

var min = Math.floor((second - hr * 3600) / 60); ? ? ?// 秒位

var sec = (second - hr * 3600 - min * 60);// equal to => var sec = second % 60;

// 毫秒位泻云,保留2位

var micro_sec = Math.floor((micro_second % 1000) / 10); ? ?return hr + ":" + min + ":" + sec + " " + micro_sec;

}

Page({

data: {

clock: ''

},

onLoad: function() {

countdown(this);

}

});

經(jīng)過如上優(yōu)化,代碼量減少一半狐蜕,運行效率也高了宠纯。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市层释,隨后出現(xiàn)的幾起案子婆瓜,更是在濱河造成了極大的恐慌,老刑警劉巖湃累,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勃救,死亡現(xiàn)場離奇詭異,居然都是意外死亡治力,警方通過查閱死者的電腦和手機蒙秒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宵统,“玉大人晕讲,你說我怎么就攤上這事覆获。” “怎么了瓢省?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵弄息,是天一觀的道長。 經(jīng)常有香客問我勤婚,道長摹量,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任馒胆,我火速辦了婚禮缨称,結果婚禮上,老公的妹妹穿的比我還像新娘祝迂。我一直安慰自己睦尽,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布型雳。 她就那樣靜靜地躺著当凡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纠俭。 梳的紋絲不亂的頭發(fā)上沿量,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音柑晒,去河邊找鬼欧瘪。 笑死,一個胖子當著我的面吹牛匙赞,可吹牛的內(nèi)容都是我干的佛掖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涌庭,長吁一口氣:“原來是場噩夢啊……” “哼芥被!你這毒婦竟也來了?” 一聲冷哼從身側響起坐榆,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤拴魄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后席镀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匹中,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年豪诲,在試婚紗的時候發(fā)現(xiàn)自己被綠了顶捷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡屎篱,死狀恐怖服赎,靈堂內(nèi)的尸體忽然破棺而出葵蒂,到底是詐尸還是另有隱情,我是刑警寧澤重虑,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布践付,位于F島的核電站,受9級特大地震影響缺厉,放射性物質(zhì)發(fā)生泄漏永高。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一芽死、第九天 我趴在偏房一處隱蔽的房頂上張望乏梁。 院中可真熱鬧,春花似錦关贵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至亥啦,卻和暖如春炭剪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翔脱。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工奴拦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人届吁。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓错妖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親疚沐。 傳聞我的和親對象是個殘疾皇子暂氯,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

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