一個頁面的倒計時代碼

今天切割一頁面,類似於團購網站的商品展示,N個競拍商品,每個都得有單獨的倒計時截止時間,期間雜七雜八的事一大堆。幸虧哥定力好,醞釀到大家都下班,辦公室安靜了,才着手寫頁面的js:倒計時。網上也有類似功能的代碼,但都不怎麼好用,乾脆自己寫吧。
分析了一下基本功能:時分秒,三級定時聯動,倒計時開關,初始化變量等等...

差不多就是這個思路,最後,處理了一些小細節。可能還有bug,等待被發現 :)


$(function(){
//====倒計時====
var timePush = {},timeId,STATIC = {'0':'h','1':'m','2':'s'},items = $(".items-prod li");
$(".time-left", items).each(function(index, callback) {
timePush["T" + index] = returnTime.call(this);
});

timeId = setTimeout(function() {
if (isEmptyObj.call(timePush)) {
clearTimeout(timeId);
return false;
}
//提前預定 處理
timeId = setTimeout(arguments.callee, 1000);
//處理
$.each(timePush, function(index, callback) {
//遞歸獲取更新後的時間
var timeItem = getTime(this, 2);
if (timeItem.join("") - 0 == 0) {
deleteTime(index);
} else {
updateTime(index, timeItem);
}
});
}, 1);

function getTime(arr, type, pre) {
if (type < 0)return 0;
var num = _numTmp = ~~arr[type],_type = STATIC["" + type];
switch (_type) {
case 'h':
--num < 0 ? pre = 0 : num;
break;
case 'm':
num = fixed2Str(--num < 0 ? getTime(arr, type - 1, 59) : num);
pre = ~~arr[type - 1] || _numTmp ? pre : 0;
arr[type] = num;
break;
case 's':
arr[type] = fixed2Str(--num < 0 ? getTime(arr, type - 1, 59) : num);
break;
default:
break;
}
if (pre != void 0)return pre;
return arr;
}

function updateTime(key, arr) {
var index = key.replace(/[^\d]/g, ''),str = arr.join("").split("");
$(".time-left", items.eq(index)).find("span i").each(function(index) {
this.innerHTML = str[index];
})
}

function deleteTime(key) {
var index = key.replace(/[^\d]/g, '');
delete timePush[key];
$(".reply-btn", items.eq(index)).attr("class", "submit-btn disabled-big").html('<span><em></em>已經結束</span>');
$(".time-left", items.eq(index)).find("span i").html(0);
}

function isEmptyObj() {
for (var i in this)return false;
return true;
}

function fixed2Str(number) {
if (number < 10)number = "0" + number;
return "" + number;
}

function returnTime() {
var time = [];
$("span", this).each(function() {
time.push($(this).text());
});
return time;
}
});


HTML

<div class="time-leave">
<span class="fl">剩餘時間:</span>

<div class="time-left fl"><p>
<span><i>0</i><i>0</i></span><span><i>3</i><i>6</i></span><span><i>3</i><i>9</i></span></p>
</div>
</div>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章