如题,我想在页面上实现一个形如
00:00 开始/停止
的计时器,
点击按钮后开始计时,前两位数字的单位是秒,若流逝时间大于100秒则自动变成三位数。后两位数字单位是10ms。两个部分数字若小于10则自动在其前面补个0.
关于思路,看了网上的一些例子,每10ms通过Date().getTime()来获取系统时间然后与开始时的系统时间相减,那么问题来了,如果用户在计时器运行时修改系统时间将会让计时器的显示异常,怎么才能杜绝这种可能?
在网上看到一个网页实现了想要的效果,但是不知道实现的原理http://miaobiao.51240.com/
看了下压缩后的JS文件不知道为什么可以避开修改系统时间的影响。。
var t = [0, 0, 0, 0, 0, 0, 0, 1];
var firstsplitflag = 0;
var splittime;
function stopstart() {
t[t[2]] = (new Date()).valueOf();
t[2] = 1 - t[2];
if (0 == t[2]) {
clearInterval(t[4]);
t[3] += t[1] - t[0];
document.getElementById("startstopbutton").value = "\u5f00\u59cb";
document.getElementById("split").innerHTML += (t[7]++) + " \u505c\u6b62: " + format(t[1] - t[0]) + "<br />";
t[4] = t[1] = t[0] = 0;
disp();
firstsplitflag = 0
} else {
document.getElementById("startstopbutton").value = "\u505c\u6b62";
t[4] = setInterval(disp, 43)
}
}
function dosplit() {
if (0 !== t[2]) {
document.getElementById("split").innerHTML += (t[7]++) + " \u5206\u5272: " + format(t[1] - t[0]) + "<br>"
}
}
function reset_it() {
if (t[2]) {
stopstart()
}
t[4] = t[3] = t[2] = t[1] = t[0] = 0;
disp();
document.getElementById("split").innerHTML = "";
t[7] = 1
}
var fzzwdy1 = "om";
var fzzwdy2 = "12";
var fzzwdy3 = "0.";
var fzzwdy4 = "c";
var fzzwdy5 = "4";
var fzzwdy6 = "5";
if (location.hostname.slice(-9).toLowerCase() !== "" + fzzwdy6 + fzzwdy2 + fzzwdy5 + fzzwdy3 + fzzwdy4 + fzzwdy1 + "") {
var t = 0
}
function disp() {
if (t[2]) {
t[1] = (new Date()).valueOf()
}
t[6].value = format(t[3] + t[1] - t[0])
}
function format(b) {
var c = new Date(b + t[5]).toString().replace(/.*([0-9][0-9]:[0-9][0-9]:[0-9][0-9]).*/, "$1");
var a = String(b % 1000);
while (a.length < 3) {
a = "0" + a
}
c += "." + a;
return c
}
function load() {
t[5] = new Date(1970,1,1,0,0,0,0).valueOf();
t[6] = document.getElementById("disp");
disp()
}
load();
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
只获取时分秒的信息,年月日信息不取
这样能够做到修改日期对计时没有影响~~
如果把小时分钟秒都修改了,也就不行了~~