【发布时间】:2021-10-01 17:08:30
【问题描述】:
我无法让第二个倒计时功能在第一个 Snippet 中正常工作。我启动了 cdtd();第二次。两者都 cdtd();函数不会发生冲突,并且位于匿名函数内部。当我启动 cdtd();我第一次得到一个工作倒计时计时器,直到 16:00:00。当我第二次启动它时,我将在 17:00:00 之前获得工作倒计时。这是这个问题的实际用例。
为了制作一个示例流程,我制作了第二个 sn-p。两者都 cdtd();确实相互碰撞,但第二个 cdtd();函数调用将返回一个工作倒计时计时器。现在我仍然不知道为什么它在第一个 sn-p 中不起作用。没有我使用的 timeOut 函数。
我不确定出了什么问题。谁有线索?
这是脚本。 https://jsfiddle.net/3fq2j6a1/
我尝试在 eachother 下运行倒计时脚本,但我不需要 :) function cdtd() { .. }
这是一个sn-p:
// First session
var sessie1 = new Date();
var totsessie1 = new Date(sessie1.getFullYear(), sessie1.getMonth(), sessie1.getDate(), 14, 16, 0, 0) - sessie1;
if (totsessie1 < 0) {
totsessie1 += 86400000; // it's after 10am, try 10am tomorrow.
}
setTimeout(function() {
document.getElementById("test1").innerHTML = "Message.";
// First countdown
function cdtd() {
var now = new Date();
var dolazak = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 16, 0, 0);
var timeDiff = dolazak.getTime() - now.getTime();
if (timeDiff <= 0) {
clearInterval(timer);
document.getElementById(id).innerHTML = '';
}
//if(minutes < 2){document.getElementById(id).style.color="#ff0000";};
var seconds = Math.floor(timeDiff / 1000);
var minutes = Math.floor(seconds / 60);
var hours = Math.floor(minutes / 60);
var days = Math.floor(hours / 24);
hours %= 24;
minutes %= 60;
seconds %= 60;
document.getElementById('time').innerHTML = " Still " + hours + " hours, " + minutes + " minutes and " + seconds + " seconds to go!";
timer = setTimeout(cdtd, 1000);
}
cdtd();
// End first countdown
}, totsessie1);
// Second session
var sessie2 = new Date();
var totsessie2 = new Date(sessie2.getFullYear(), sessie2.getMonth(), sessie2.getDate(), 14, 17, 0, 0) - sessie1;
if (totsessie2 < 0) {
totsessie2 += 86400000; // it's after 10am, try 10am tomorrow.
}
setTimeout(function() {
document.getElementById("test1").innerHTML = "Message.";
// Second countdown
function cdtd() {
var now = new Date();
var dolazak = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 17, 0, 0);
var timeDiff = dolazak.getTime() - now.getTime();
if (timeDiff <= 0) {
clearInterval(timer);
document.getElementById(id).innerHTML = '';
}
//if(minutes < 2){document.getElementById(id).style.color="#ff0000";};
var seconds = Math.floor(timeDiff / 1000);
var minutes = Math.floor(seconds / 60);
var hours = Math.floor(minutes / 60);
var days = Math.floor(hours / 24);
hours %= 24;
minutes %= 60;
seconds %= 60;
document.getElementById('time').innerHTML = " Still " + hours + " hours, " + minutes + " minutes and " + seconds + " seconds to go!";
timer = setTimeout(cdtd, 1000);
}
cdtd();
// End second countdown
}, totsessie2);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p id="test1">This is a paragraph.</p>
<span id="time"></span>
这里是我在eachother下使用倒计时脚本时的sn-p代码。
function cdtd() {
var now = new Date();
var dolazak = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 15, 0, 0);
var timeDiff = dolazak.getTime() - now.getTime();
if (timeDiff <= 0) {
clearInterval(timer);
document.getElementById(id).innerHTML = '';
}
//if(minutes < 2){document.getElementById(id).style.color="#ff0000";};
var seconds = Math.floor(timeDiff / 1000);
var minutes = Math.floor(seconds / 60);
var hours = Math.floor(minutes / 60);
var days = Math.floor(hours / 24);
hours %= 24;
minutes %= 60;
seconds %= 60;
document.getElementById('time').innerHTML = " Still " + hours + " hours, " + minutes + " min and " + seconds + " seconds to go! (countdown to line 49)";
timer = setTimeout(cdtd, 1000);
}
cdtd();
function cdtd() {
var now = new Date();
var dolazak = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 16, 0, 0);
var timeDiff = dolazak.getTime() - now.getTime();
if (timeDiff <= 0) {
clearInterval(timer);
document.getElementById(id).innerHTML = '';
}
//if(minutes < 2){document.getElementById(id).style.color="#ff0000";};
var seconds = Math.floor(timeDiff / 1000);
var minutes = Math.floor(seconds / 60);
var hours = Math.floor(minutes / 60);
var days = Math.floor(hours / 24);
hours %= 24;
minutes %= 60;
seconds %= 60;
document.getElementById('time').innerHTML = " Still " + hours + " hours, " + minutes + " min and " + seconds + " seconds to go! (countdown to line 49)";
timer = setTimeout(cdtd, 1000);
}
cdtd();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p id="test1">This is a paragraph.</p>
<span id="time"></span>
https://jsfiddle.net/edfcLzhw/
但我需要在会话块中使用它们。这样做时,第二个倒数计时器会剩下不同的时间。 totsessie1(); totsessie2();
【问题讨论】:
-
您的代码应该出现在in问题中,而不是链接后面。当你这样做时,请只提供重现问题所需的最少代码。所以去掉任何不需要说明问题的东西。
-
由于问题的性质,很难仅通过某些代码。这是因为第二个倒数计时器仅在发布所有代码时才起作用。此外,会话 setTimeout 函数仅在我提供代码的所有部分时才有效。我尝试在使用 ctrl-k 并粘贴时在此处插入完整代码,但它确实有点混乱。
-
阅读指南。确保代码出现在两行之间,每行都有三个反引号。由于它是 JavaScript,您还可以使用工具栏在您的问题中创建一个可运行的 sn-p。抱歉,您的问题必须包含所有相关信息,而不是链接。
-
我现在使用的是 sn-ps trincot。感谢您的解释。希望通过更多地按照指导方针工作,这种方式会变得更加清晰。唯一的缺点是 sn-ps 示例中给出的时间不能以这种方式更改,只要它是静态代码。在 jsfiddle 中它是可变的。
-
您的代码定义了两个同名的函数,这意味着只会定义第二个函数。您至少应该为您的函数使用不同的名称。您能否描述(在您的问题中)预期的行为到底是什么?当我们不知道您想要实现什么时,我们无法知道“正确运行”对您意味着什么。
标签: javascript timer settimeout setinterval countdown