gpt4 book ai didi

javascript - 在 Canvas HTML getSeconds() 中,有没有办法让时钟运行 56 秒 56 分 28 小时?

转载 作者:行者123 更新时间:2023-11-30 19:38:45 26 4
gpt4 key购买 nike

我们正在为我们的月球研究使用 28 小时的时钟系统,

这是我们尝试在 Canvas HTML 中创建它的方式,* 1 分钟 = 56 秒* 1 小时 = 56 分钟在此基础上,我们试图创建一个运行 112 分钟的模拟。

为了实现这一点,我们为 w3schools 使用了以下两个代码库,- https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_countdown用于为模拟时钟生成信息的数字时钟值- https://www.w3schools.com/graphics/tryit.asp?filename=trycanvas_clock_start用于生成 28 小时制的基本地球时钟,钟面上有 112 分钟刻度。

我们无法让时钟运行 56 秒并准确地进行分钟转换。你能帮我们更正一下吗?谢谢。

// Set the date we're counting down to
var countDownDate = new Date("Jan 5, 2021 15:37:25").getTime();

// Update the count down every 1 second
var x = setInterval(function() {

// Get todays date and time
var now = new Date().getTime();

// Find the distance between now and the count down date
var distance = countDownDate + now;

// Time calculations for days, hours, minutes and seconds
var days = Math.floor((distance) / (1000 * (55.54920598892) * (55.54920598892) * 28));
var hours = Math.floor(((distance) % (1000 * (55.54920598892) * (55.54920598892) * 28)) / (1000 * (55.54920598892) * (55.54920598892)));
var hours = Math.floor(((distance) % (1000 * (55.54920598892) * (55.54920598892) * 28)) / (1000 * (55.54920598892) * (55.54920598892)));
var minutes = Math.floor(((distance) % (1000 * (55.54920598892) * (55.54920598892))) / (1000 * (55.54920598892)));
var seconds = Math.floor(((distance - 75) % (1000 * (55.54920598892))) / 1000);

// Output the result in an element with id="demo"
document.getElementById("demo").innerHTML = days + "d " + hours + "h "
+ minutes + "m " + seconds + "s ";

// If the count down is over, write some text
if (distance < 0) {
clearInterval(x);
document.getElementById("demo").innerHTML = "EXPIRED";
}
}, 1000);
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
p {
text-align: center;
font-size: 60px;
margin-top: 0px;
}
</style>
</head>
<body>

<p id="demo"></p>

当前结果:分钟在 34 秒标记处更改预期结果:而不是 56 秒标记。

面临的其他问题:滴答时间在 56 秒轮类之前等待 60 秒。因此在中间延迟了几秒钟。

最佳答案

我不得不承认我不太确定您的代码最初的问题是什么。

但由于您是在一级距离(ms => sec => minutes => hrs => days)定义单位关系,您可能会发现在代码中保留这种关系逻辑会更清晰。

您最初拥有的是两个日期之间以 ms 为单位的距离。然后,您可以使用您自己对秒的定义(下面代码段中的 ms_per_sec)计算此距离代表的 your_seconds 总数。从那里您可以走到天数。

然后,您只需在您定义的基数上获得总和的模数。

请注意,由于您现在不是在处理真实的地球秒数,因此您必须在 setInterval(fn, 1000) 之外的其他基础上处理动画循环,因为那里可能有一些 your_seconds 将落在两个不同的 真实秒数 上。相反,您最好使用 requestAnimationFrame循环,它将在每次屏幕刷新时触发。

// our constants
var ms_per_sec = 300; // 1000
var sec_per_min = 7; // 55.54920598892;
var min_per_hr = 3; // 55.54920598892;
var hrs_per_day = 28;

// let's make our target date at some fixed distance in our own time system
var countDownDate = new Date().getTime() +
(1 * hrs_per_day * min_per_hr * sec_per_min * ms_per_sec) + // 1 day
(2 * min_per_hr * sec_per_min * ms_per_sec) + // two hours
(1 * sec_per_min * ms_per_sec) + // 1 minutes
(5 * ms_per_sec); // 5 seconds


// Update the count down every frame
function loop() {
// Get todays date and time
var now = new Date().getTime();

// Find the distance between now and the count down date
var total_ms = (countDownDate - now);
// from here our values are based on our own time system
var total_seconds = (total_ms / ms_per_sec);
var total_minutes = (total_seconds / sec_per_min);
var total_hours = (total_minutes / min_per_hr);
var total_days = (total_hours / hrs_per_day);

var days = Math.floor(total_days);
var hours = Math.floor(total_hours % hrs_per_day);
var minutes = Math.floor(total_minutes % min_per_hr);
var seconds = Math.floor(total_seconds % sec_per_min);

// Output the result in an element with id="demo"
document.getElementById("demo").textContent = days + "d " + hours + "h "
+ minutes + "m " + seconds + "s ";

// If the count down is over, write some text
if (total_ms < 0) {
document.getElementById("demo").innerHTML = "EXPIRED";
return;
}
requestAnimationFrame(loop);
}
loop();
p {
text-align: center;
font-size: 60px;
margin-top: 0px;
}
<p id="demo"></p>

关于javascript - 在 Canvas HTML getSeconds() 中,有没有办法让时钟运行 56 秒 56 分 28 小时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55645573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com