gpt4 book ai didi

javascript - 继续清除 setIntervall 而不是重置它

转载 作者:行者123 更新时间:2023-11-29 22:02:21 26 4
gpt4 key购买 nike

编辑和更新:作为引用,我只用 1 个计时器和一个秒到时间转换器重写了整个内容。非常干净,不那么复杂。这是完整的代码:http://pastebin.com/Hb6cBryL

我得到了这个我用 javascript 构建的计时器:http://powerpoint.azurewebsites.net/

这是非常简单的代码,但对于最终实现,我需要能够暂停计时器并重新启动它。我使用 2 个 setIntervals,1 个用于每 60 秒触发的分钟数,1 个用于每秒触发的秒数。

当我暂停它时,我会清除间隔。但是,当我重新启动它们时,分钟会以 60 的间隔重新启动,并且不再与秒同步。

我可能以非常错误的方式实现了这一点,所以我想征求你的意见。我的第一个想法是继续 inverval 但避免更新页面上的变量和文本,以便分钟/秒保持同步<但是这对我来说听起来不是一个理想的解决方案。欢迎所有提示:)

JS代码:

    var minutes = null, seconds = null, cnt, secs;
function settimer(frm) { if (minutes == null) { cnt = frm.timeinput.value - '1'; secs = '59';} };

function stop() {
clearInterval(minutes);
clearInterval(seconds);
minutes = null;
seconds = null;
document.getElementById("minutes").innerHTML = '00';
document.getElementById("seconds").innerHTML = '00';
}

function pause() {
clearInterval(minutes);
clearInterval(seconds);
}

function runtimer() {
event.preventDefault();
if (minutes == null) {
document.getElementById("minutes").innerHTML = cnt;};
minutes = setInterval(function () {
if (cnt == '0') { stop() } else { cnt -= 1; document.getElementById("minutes").innerHTML = cnt; };

}, 6000);
if (seconds == null) { document.getElementById("seconds").innerHTML = secs; };
seconds = setInterval(function () {
if (secs == '0') { secs = '59' } else { secs -= 1; document.getElementById("seconds").innerHTML = secs; };
}, 100);
}

最佳答案

您需要以某种方式包装它们,并认识到您无法立即获取计时器的 ID。

function setIntervalWithOffset(fn, delay, offset) {
var o = {id: null, o_id: null};
o.o_id = window.setTimeout(function () {
o.id = window.setInterval(fn, delay);
}, offset);
return o;
}

function setTimeoutWithOffset(fn, delay, offset) {
var o = {id: null, o_id: null};
o.o_id = window.setTimeout(function () {
o.id = window.setTimeout(fn, delay);
}, offset);
return o;
}

要清除,请在 obj.o_id 上使用 window.clearTimeout 以及您为 obj.id 设置的任何类型。


您还应该考虑是否最好实现 setTimeout 循环而不是使用 setInterval 这样您就不会出现级联错误

关于javascript - 继续清除 setIntervall 而不是重置它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22915959/

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