基于实时时钟
Clock based in real time
我正在制作一款 ZORK 风格的游戏,它有持续不断的警报和提示,并且包括你需要坚持的时间才能赢得它。
由于它有玩游戏的警报和提示,我无法使用设置的超时来 运行 时钟,所以我创建了一个基于实时的时钟,但在让它工作时遇到了一些问题.
这是代码
var now = new Date();
var stS = now.getSeconds();
var stM = now.getMinutes();
var stH = now.getHours();
function getElapsedTime() {
setTimeout(function () {
var reS = now.getSeconds();
var reM = now.getMinutes();
var reH = now.getHours();
var elapS = reS - stS;
var elapM = reM - stM;
var elapH = reH - stH;
if (elapM < 0) {
reM = reM + 60;
elapM = reM - stM;
}
if (elapS < 0) {
reS = reS + 60;
elapS = reS - stS;
}
alert(elapS);
alert(elapM);
alert(elapH);
}, 10000);
}
getElapsedTime();
编辑:
我 运行 它在 jsfiddle 中,但它 returns 警告说没有时间过去,而它应该说十秒过去了。
http://jsfiddle.net/t57wsrx8/
您使用的 now
与 10 秒前开始使用的相同。 Date
对象保留给定的时间。它不会随着时间的流逝而自动改变。您需要实例化一个新的 now
:
function getElapsedTime() {
setTimeout(function () {
var now = new Date();
var reS = now.getSeconds();
var reM = now.getMinutes();
var reH = now.getHours();
var elapS = reS - stS;
var elapM = reM - stM;
var elapH = reH - stH;
if (elapM < 0) {
reM = reM + 60;
elapM = reM - stM;
}
if (elapS < 0) {
reS = reS + 60;
elapS = reS - stS;
}
alert(elapS);
alert(elapM);
alert(elapH);
}, 10000);
}
请注意,如果将日期视为数字,则可以更清楚地计算时间跨度:
var start = +new Date();
function getElapsedTime() {
setTimeout(function () {
var elapsed = +new Date() - start;
var elapS = Math.floor(elapsed / 1000) % 60;
var elapM = Math.floor(elapsed / 60000) % 60;
var elapH = Math.floor(elapsed / 3600000) % 24;
alert(elapS);
alert(elapM);
alert(elapH);
}, 10000);
}
getElapsedTime();
我正在制作一款 ZORK 风格的游戏,它有持续不断的警报和提示,并且包括你需要坚持的时间才能赢得它。
由于它有玩游戏的警报和提示,我无法使用设置的超时来 运行 时钟,所以我创建了一个基于实时的时钟,但在让它工作时遇到了一些问题.
这是代码
var now = new Date();
var stS = now.getSeconds();
var stM = now.getMinutes();
var stH = now.getHours();
function getElapsedTime() {
setTimeout(function () {
var reS = now.getSeconds();
var reM = now.getMinutes();
var reH = now.getHours();
var elapS = reS - stS;
var elapM = reM - stM;
var elapH = reH - stH;
if (elapM < 0) {
reM = reM + 60;
elapM = reM - stM;
}
if (elapS < 0) {
reS = reS + 60;
elapS = reS - stS;
}
alert(elapS);
alert(elapM);
alert(elapH);
}, 10000);
}
getElapsedTime();
编辑: 我 运行 它在 jsfiddle 中,但它 returns 警告说没有时间过去,而它应该说十秒过去了。 http://jsfiddle.net/t57wsrx8/
您使用的 now
与 10 秒前开始使用的相同。 Date
对象保留给定的时间。它不会随着时间的流逝而自动改变。您需要实例化一个新的 now
:
function getElapsedTime() {
setTimeout(function () {
var now = new Date();
var reS = now.getSeconds();
var reM = now.getMinutes();
var reH = now.getHours();
var elapS = reS - stS;
var elapM = reM - stM;
var elapH = reH - stH;
if (elapM < 0) {
reM = reM + 60;
elapM = reM - stM;
}
if (elapS < 0) {
reS = reS + 60;
elapS = reS - stS;
}
alert(elapS);
alert(elapM);
alert(elapH);
}, 10000);
}
请注意,如果将日期视为数字,则可以更清楚地计算时间跨度:
var start = +new Date();
function getElapsedTime() {
setTimeout(function () {
var elapsed = +new Date() - start;
var elapS = Math.floor(elapsed / 1000) % 60;
var elapM = Math.floor(elapsed / 60000) % 60;
var elapH = Math.floor(elapsed / 3600000) % 24;
alert(elapS);
alert(elapM);
alert(elapH);
}, 10000);
}
getElapsedTime();