一个页面多个记时js代码
一个页面多个倒计时js代码
粗略的整理下
解决需求:
1.解决一个页面多个倒计时
2.每隔一段时间与服务器校验一次时间
3.页面倒计时完毕后,先与服务器校验是否倒计时完毕,完毕则调用回调函数,否则继续倒计时
倒计时js函数:
HTML:
调用:
粗略的整理下
解决需求:
1.解决一个页面多个倒计时
2.每隔一段时间与服务器校验一次时间
3.页面倒计时完毕后,先与服务器校验是否倒计时完毕,完毕则调用回调函数,否则继续倒计时
倒计时js函数:
/** * 倒计时函数 * @param ids 元素id * @param ifinvest 回调函数 * */ function counts(ids,ifinvest){ var interval,a=0,time,startt,tenderid; this.startcout=function(){ startt = document.getElementById(ids).getAttribute("date-start"); var nowtime = document.getElementById(ids).getAttribute("date-now"); tenderid = document.getElementById(ids).getAttribute("tender-id"); time = this.getSecond(startt,nowtime); if (!interval) interval = setInterval(this.go, 1000); } this.go=function(){ a++; --time; var str=""; //-------------- d = Math.floor(time / 86400), h = Math.floor((time % 86400) / 3600), m = Math.floor(((time % 86400) % 3600) / 60), s = Math.floor(((time % 86400) % 3600) % 60); if(a==300 || time <= 0){//每300秒与服务器校验时间 a=0; $.ajax({//与服务器校验时间 url : "web/getsysdatetime.do", type : "post", dataType : 'json', success : function(data) { var oStartDate = js_patch_getdate(startt+""); var oNowDate = js_patch_getdate(data+""); var startTime = oStartDate.getTime(); var nowTime = oNowDate.getTime(); time = (startTime-nowTime)>0?(startTime-nowTime)/1000:0; if(time<=0){ clearInterval(interval);//清除倒计时 ifinvest.starts();//成功的回调函数 } }, error:function(XMLHttpRequest, textStatus, errorThrown){ clearInterval(interval);//清除倒计时 } }); } if (time>0){ str = "<span class='day'>"+js_patch_fillZero(d, 2)+"</span>天<span class='day'>"+js_patch_fillZero(h, 2)+"</span>时<span class='day'>"+js_patch_fillZero(m, 2)+"</span>分<span class='day'>"+js_patch_fillZero(s, 2)+"</span>秒"; }else{ str = "<span class='day'>00</span>天<span class='day'>00</span>时<span class='day'>00</span>分<span class='day'>00</span>秒"; } document.getElementById(ids).innerHTML = str; } this.getSecond=function(startdate,nowdate) { var oStartDate = js_patch_getdate(startdate+""); var oNowDate = js_patch_getdate(nowdate+""); var startTime = oStartDate.getTime(); var nowTime = oNowDate.getTime(); var second = (startTime-nowTime)>0?(startTime-nowTime)/1000:0; return second; } } /** * 将字符串格式的日期(如:20150415092645)转换成js Date对象 * 注意Date对象的初始化方式 * */ function js_patch_getdate(stime) { var datetime = new Date( parseFloat(stime.substr(0, 4)), parseFloat(stime.substr(4, 2) - 1), parseFloat(stime.substr(6, 2)), parseFloat(stime.substr(8, 2)), parseFloat(stime.substr(10, 2)), parseFloat(stime.substr(12, 2))); return datetime; } /** * 格式化 * */ function js_patch_fillZero(num, digit) { var str = '' + num; while (str.length < digit) { str = '0' + str; } return str; }
HTML:
<div id="timer0" tender-id="${tendermap.tender_id}" date-start="${tendermap.buy_start_time}" date-now="${starttime}"> <span class="day">00</span>天<span class="day">00</span>时<span class="day">00</span>分<span class="day">00</span>秒 </div>
调用:
//一般放到 $(document).ready(function() {});中 if(document.getElementById("timer0")!=null){ var ifstarts = new if_startinvest("timer0", document.getElementById("timer0").getAttribute("tender-id")); var counts_1 = new counts("timer0",ifstarts); counts_1.startcout(); }