网址:http://3c.taobao.com/
怎么精确到毫秒,还有他好像不是用计时器做的,因为几乎没占CPU,如果用JS的计时器会很占CPU的

解决方案 »

  1.   

    应该是js做的,禁用页面的js脚本,计数器就不动了。
    没有占cpu不能说明不是js做的
      

  2.   

    的确是Js
    可是我看了一下午没明白原理!!!
    (function(){
                    var U = YAHOO.util,Dom = U.Dom,Event = U.Event,
                    dataCon = Dom.get('J_saleCountdown');
                    if(!dataCon) return;                var bar = Dom.get('J_JoinBar'),
                    show = Dom.get('J_JoinNum'),
                    endTime = dataCon.getAttribute('data-startTime'),
                    startTime = dataCon.getAttribute('data-beginTime'),
                    serveTime = dataCon.getAttribute('data-serveTime'),
                    sellerId = dataCon.getAttribute('data-sellerId'),
                    auctionId = dataCon.getAttribute('data-auctionId'),
                    lowest = dataCon.getAttribute('data-lowest')>>0,
                    already=Dom.get("J_Already"),
                    price=Dom.get("J_Price");
                    function process(num){                    if(num >= 0){
                            already.innerHTML="<span>已团:<strong>"+num+"</strong>人</span><span >(最低人数:"+lowest+")</span>"                    }else{
                            disable('系统异常,请重试');
                            already.innerHTML="<span >(最低人数:"+lowest+")</span>"
                        }
                    }                function dateFormat(d){
                        var d1=d.match(/^(\d{4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})/);
                        var d2=new Date();
                        d2.setFullYear(d1[1],d1[2]-1,d1[3]);
                        d2.setHours(d1[4],d1[5],d1[6]);
                        return d2;
                    }                function timeDis(d1,d2){
                        if(!d1)d1 = dateFormat(endTime).getTime();
                        if(!d2)d2 = dateFormat(serveTime).getTime();
                        return d1 - d2;
                    }                function disable(str){
                        str = str || '团购结束';
                        bar.innerHTML =""
                        Dom.get("J_Count_title").style.textIndent="-1000em"
                        Dom.get("sale-countdown").innerHTML=str
                        Dom.addClass(bar,'timeout');
                        bar.setAttribute('href','javascript:void(0);');
                    }
      

  3.   


    function base64encode(str)
                    {
                        str = utf16to8(str);
                        var out, i, len;
                        var c1, c2, c3;
                        var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
                        len = str.length;
                        i = 0;
                        out = "";
                        while(i < len)
                        {
                            c1 = str.charCodeAt(i++) & 0xff;
                            if(i == len){
                                out += base64EncodeChars.charAt(c1 >> 2);
                                out += base64EncodeChars.charAt((c1 & 0x3) << 4);
                                out += "==";
                                break;
                            }
                            c2 = str.charCodeAt(i++);
                            if(i == len)
                            {
                                out += base64EncodeChars.charAt(c1 >> 2);
                                out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
                                out += base64EncodeChars.charAt((c2 & 0xF) << 2);
                                out += "=";
                                break;
                            }
                            c3 = str.charCodeAt(i++);
                            out += base64EncodeChars.charAt(c1 >> 2);
                            out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
                            out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
                            out += base64EncodeChars.charAt(c3 & 0x3F);
                        }
                        return out;
                    }
                    function utf16to8(str) {
                        var out, i, len, c;
                        out = "";    len = str.length;
                        for(i = 0; i < len; i++)
                        {
                            c = str.charCodeAt(i);
                            if ((c >= 0x0001) && (c <= 0x007F))
                            {
                                out += str.charAt(i);
                            } else if (c > 0x07FF) {
                                out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
                                out += String.fromCharCode(0x80 | ((c >>  6) & 0x3F));
                                out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));
                            } else {
                                out += String.fromCharCode(0xC0 | ((c >>  6) & 0x1F));
                                out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));
                            }
                        }
                        return out;
                    }                function init(){                    var timer,uri;                    if(timeDis()>0){
                            var dEnd = dateFormat(endTime).getTime();
                            var dCur = dateFormat(serveTime).getTime();
                            timer = setInterval(function(){
                                if(timeDis(dEnd,dCur += 1000)<= 0 ){
                                    disable();
                                    clearInterval(timer);
                                }
                            },1000);                        uri = 'http://tbskip.taobao.com/json/group_auction.htm?auctionId={auctionId}&nick={sellerId}&startTime={startTime}&endTime={endTime}';
                            uri = uri.replace('{auctionId}',auctionId).replace('{sellerId}',base64encode(sellerId)).replace('{startTime}',startTime).replace('{endTime}',endTime) + '&t=' + new Date().getTime();
                            U.Get.script(uri,{
                                onSuccess:function(){
                                    if(typeof DigiGroup == 'undefined') return;
                                    process(DigiGroup.current>>0);
                                    delete DigiGroup;
                                }
                            });
                        }else{
                            disable();
                        }
                    }
                    init();
                })()