最近做了一個房產的秒殺,團購的電子商務網站(房子也有秒殺,出手不小啊),其中裡面有一個秒殺的倒數計時展示,主要是判斷當前時間距離秒殺開始還有多少時間,還有秒殺開始和秒殺結束的各種展示。 其中最主要的一點就是所謂的當前時間不能使用瀏覽器透過new Date()取得的客戶端時間,這樣只要用戶修改了自己的機器時間那麼倒數計時就會亂透了,所以這個當前時間必須使用的是伺服器時間,所以採用的是靜態快取頁面所以這個當前時間使用ajax方式進行取得 複製程式碼 程式碼如下: .距活動開始還有: . 參加秒殺! ! ! .<BR>var msbegintime = "1323446400000"; //這個是活動開始的時間戳<BR>var msendtime = "1325174400000"; //這個是活動結束的時間戳<BR>function start(){<BR> callBackServerTime("sk_time", "wyz", msbegintime, msendtime);<BR>}<BR>//_showtimediv:時間顯示區域,_showqdiv:狀態顯示區域<BR>//這個向伺服器發送一個ajax請求,伺服器伺服器目前的時間戳,也就是xmlobj.responseText是伺服器的時間戳記<BR>function callBackServerTime(_showtimediv, _showqdiv, _ms_begintime, _ms_endtime) {<BR> random=" Math.round(Math.random() * 10000000);<BR> var ajaxobj = new AJAXRequest; // 建立AJAX物件<BR> > ajaxobj.url = "/gz/source/getServerTime.do?" urlstr; //注意ajax的跨域問題<BR> ajaxobj.callback = function(xmlobj) {<BR> , _showqdiv, _ms_begintime, _ms_endtime, _tryid,sourceid);<BR> ShowQTime( _showtimediv, _showqdiv,"1323158067288,方便測試<BR> }<BR> ajaxobj .send(); // 傳送請求<BR>}<BR>//動態顯示」秒殺「時間函數<BR>function ShowQTime(_showtimediv, _showqdiv, _nowtime, _ms_begintime, _ms_endtimediv, _showqdiv, _nowtime, _ms_begintime, _ms_endtime) {<<time> );<BR> var timmer = Math.floor((_ms_endtime - _nowtime) / (1000)); <BR> if (_nowtime >= document.getElementById(_showtimediv).innerHTML = "<span class='pim_time'>0天<span class='pim_time'>0小時<span class='pim_time'>0分鐘<span class='pim_time'>0秒";<BR> document.getElementById(_showqdiv).innerHTML = "<span class='btn_01'><a hrefqdiv).innerHTML = "<span class='btn_01'><a hrefq='/gz/sk//v /'> 秒殺開始了! ! !";<BR> } else {<BR> //秒殺倒數<BR> var nD = Math.floor(nMS / (1000 * 60 * 60 * 24));<BR> var nH = Math.floor(nMS / (1000 * 60 * 60)) % Math.floor(nMS / (1000 * 60 * 60)) % 24;< floor(nMS / (1000 * 60)) % 60;<BR> var nS = Math.floor(nMS / 1000) % 60;<> Math if (nD >= 0) {<BR> var _timestr = "";<BR> nd.length == 1) {<BR> snd = "0" snd;<BR> }<BR> }<BR> var snH = nH.toString();<BR> if (snH.length == 1) {<BR> }<BR> _timestr = "<span class='pim_time'>" snH .substring(0, 1) snH.substring(1, 2) "小時";<BR> var snM = nM.toString() > var snM = nM.toString() > snM = "0" snM;<BR> substring(0, 1) snM.substring(1, 2) "分鐘" ;<BR> var snS = nS.toString();<BR> snS = "0" snS;<BR> }<BR> _timestr = "<span class= 'pim_time'>" snS.substring(0, 1) snS.substring(1, 2) "秒";<BR> 🎜> //秒殺結束<BR> document.getElementById(_showtime).innerHTML = "<spantime <p. <span class ='pim_time'>0分鐘<span class='pim_time'>0秒";<BR> document.getElementById(_showqdiv).in document.getElementById(_showqdiv).inin document.getElementById(_showqdiv).inin href='/gz/sk/v/'> 秒殺結束了! ! ! ";<BR> }<BR> }<BR> // 注意 (_nowtime 1000) 增加 1 秒<BR> // 注意 (_nowtime 1000) 增加 1 秒<BR> // 注意 (_nowtime 1000) 增加 1 秒<BR> // 注意 (_nowout""" ,'" (_nowtime 1000) "','" _ms_begintime "','" _ms_endtime "')", 1000);<BR>}<BR>function AJAXRequest() {<BR> var CBfunc,ObjSelf;<BR> ObjSelf=this;<BR> 嘗試{ xmlObj=new XMLHttpRequest; }<BR> "); 🎜> catch(e2) {<BR> 嘗試{ xmlObj=new ActiveXObject("Microsoft.XMLHTTP"); }<BR> }<BR> }<BR> 若(! xmlObj) return false;<BR> this.method="POST";<BR> this.url;<BR> this.async=true;<BR> (cbobj) {return;}<BR> this.send=function() {<BR> if(!this.method||!this.url||!this.async) return falsese;<BR> 但this.method, this.url, this.async);<BR> if(this.method=="POST") xmlObj.setRequestHeader("Content-Type","application/x-www-form- urlencoded" ); <BR> xmlObj.onreadystatechange=function() {<BR> j.status==200) {<BR> ObjSelf.callback(xmlObj) ;<BR> }<BR> }<BR> }<BR> Obj.send(null) ; <BR> }<BR> }<BR>