ghyghoo8 发表于 2013-1-29 08:56:09

一个页面的倒计时代码

今天切割一页面,类似于团购网站的商品展示,N个竞拍商品,每个都得有单独的倒计时截止时间,期间杂七杂八的事一大堆。幸亏哥定力好,酝酿到大家都下班,办公室安静了,才着手写页面的js:倒计时。网上也有类似功能的代码,但都不怎么好用,干脆自己写吧。
分析了一下基本功能:时分秒,三级定时联动,倒计时开关,初始化变量等等...

差不多就是这个思路,最后,处理了一些小细节。可能还有bug,等待被发现http://www.agoit.com/images/smiles/icon_smile.gif

$(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 = 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 || _numTmp ? pre : 0;                  arr = num;                  break;                case 's':                  arr = 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;            })      }      function deleteTime(key) {            var index = key.replace(/[^\d]/g, '');            delete timePush;            $(".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>
页: [1]
查看完整版本: 一个页面的倒计时代码