js倒计时的一个问题
时间:2011-09-13
来源:互联网
我重服务器端取回一个 时间戳
然后页面 setinterval 倒计时
页面 过一会 在刷新 发现时间 有延迟 差了几十秒 时间长了 还出现差了 几分钟(秒杀程序 差这么多有点说不过去)
有没有好的方法解决
代码很简单 就是setinterval 就不发了
然后页面 setinterval 倒计时
页面 过一会 在刷新 发现时间 有延迟 差了几十秒 时间长了 还出现差了 几分钟(秒杀程序 差这么多有点说不过去)
有没有好的方法解决
代码很简单 就是setinterval 就不发了
作者: 125989100 发布时间: 2011-09-13
引用:
原帖由 125989100 于 2011-9-13 20:39 发表我重服务器端取回一个 时间戳
然后页面 setinterval 倒计时
页面 过一会 在刷新 发现时间 有延迟 差了几十秒 时间长了 还出现差了 几分钟(秒杀程序 差这么多有点说不过去)
有没有好的方法解决
代码很 ...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>无标题文档</title> </head> <body> <div id="timer"> <span></span>年 <span></span>月 <span></span>日 <span></span>分 <span></span>秒 </div> <div id="_timer"> <span></span>年 <span></span>月 <span></span>日 <span></span>分 <span></span>秒 </div> <script> /* @author : suntiger035 @date : 2010.10.12 @description : daojishi */ function timer(options){ this.init(options); } timer.prototype = { init : function(options){ this.setting = options; this.element = this.setting.icontainer; this.endDate = new Date(this.setting.time).getTime(); this.timer = null; this.run(); }, run : function(){ clearTimeout(this.timer); var startTime = new Date().getTime(); var interval = Math.round((this.endDate - startTime) / 1000); if(interval >= 0){ var _year = Math.floor(interval/60/60/24/30) > 0 ? this.handleNumber(Math.floor(interval/60/60/24/30%12)) : "00"; var _day = Math.floor(interval/60/60/24) > 0 ? this.handleNumber(Math.floor(interval/60/60/24%30)) : "00"; var _hour = Math.floor(interval/60/60) > 0 ? this.handleNumber(Math.floor(interval/60/60%24)) : "00"; var _minute = Math.floor(interval/60) > 0 ? this.handleNumber(Math.floor(interval/60%60)) : "00"; var _second = Math.floor(interval) > 0 ? this.handleNumber(Math.floor(interval%60)) : "00"; var arr = [_year,_day,_hour,_minute,_second]; for(var i = 0;i < this.element.length;i++){ if(this.element[i][1]) this.element[i][0].innerHTML = arr[i]; } var self = this; this.timer = setTimeout(function(){ self.run(); },1000); }else{ clearTimeout(this.timer); alert("完啦!"); } }, handleNumber : function(n){ var n = parseInt(n, 10); if(n > 0){ if(n <= 9){ n = "0" + n; } return String(n); }else{ return "00"; } } }; var _span = document.getElementById("timer").getElementsByTagName("span"); var __span = document.getElementById("_timer").getElementsByTagName("span"); new timer({ icontainer : [[_span[0],false],[_span[1],true],[_span[2],true],[_span[3],true],[_span[4],true]], time : "2014/11/1" }); new timer({ icontainer : [[__span[0],true],[__span[1],true],[__span[2],true],[__span[3],true],[__span[4],true]], time : "2010/11/1" }); </script> </body> </html>
提示:您可以先修改部分代码再运行
哥们,这是我以前整的,你看能不能用,或者自己改下 提示:您可以先修改部分代码再运行
作者: suntiger035 发布时间: 2011-09-13
setinterval里是用本地时间的差值来计算,或者每次运行加x毫秒?
估计是后者,不然误差不会累加。
-----
建议使用本地时间,提醒用户同步(windows的自带时间同步就可以了)
或者先计算服务器和本地时间的差值
估计是后者,不然误差不会累加。
-----
建议使用本地时间,提醒用户同步(windows的自带时间同步就可以了)
或者先计算服务器和本地时间的差值
作者: zhanyuzai 发布时间: 2011-09-13
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28