Javascript 如何每周在数组中显示一个项目
我正在尝试创建一个每周记忆诗的程序。我有代码来显示该项,但只需要延迟我希望代码在更改项之前等待多长时间。如何在一个数组中一次显示一个项目一周,然后继续下一个项目而不等待一周的延迟?这就是我现在拥有的:Javascript 如何每周在数组中显示一个项目,javascript,arrays,loops,time,Javascript,Arrays,Loops,Time,我正在尝试创建一个每周记忆诗的程序。我有代码来显示该项,但只需要延迟我希望代码在更改项之前等待多长时间。如何在一个数组中一次显示一个项目一周,然后继续下一个项目而不等待一周的延迟?这就是我现在拥有的: <p id="wfm"></p> var mind = []; var i = 0; var wfmind = document.getElementById('wfm'); function next_verse() { wfmind.innerHTML
<p id="wfm"></p>
var mind = [];
var i = 0;
var wfmind = document.getElementById('wfm');
function next_verse() {
wfmind.innerHTML = mind[i % mind.length];
i += 1;
}
setInterval(next_verse, 1000);
var mind=[];
var i=0;
var wfmind=document.getElementById('wfm');
函数next_verse(){
wfmind.innerHTML=mind[i%mind.length];
i+=1;
}
设定间隔(下一节,1000);
您可以使用当前时间作为索引,它从1970年开始计算,而不是用户进入站点的任意时间
在写入时,当前时间戳为14936849486
var d = new Date();
// +d === 1493684749486
要将当前时间戳转换为数组索引,您需要知道一周内的毫秒数(1000*60*60*24*7),然后计算自1970年以来已经过去了多少周
var index = Math.floor(+d / (1000*60*60*24*7));
// 2469 weeks have passed since 1970
// output `mind[index]` now.
为了这里的答案,我假设你想在周五上午9点更改项目。下一个最接近的星期五上午9点是14940000000
d.setMilliseconds(0);
d.setSeconds(0);
d.setMinutes(0);
d.setHours(9);
d.setDate(d.getDate() + (7 + 5 - d.getDay()) % 7); // How many days away is Friday from Monday? Add that to the current date.
这是315250514毫秒。您将设置超时这么长时间来启动下一个更改
当项目更改时,为以下更改启动新的超时。这是首选的设置间隔
function displayNextItem() {
var d = new Date();
var timestamp = +d;
var index = Math.floor(timestamp / (1000*60*60*24*7));
wfmind.innerHTML = mind[index % mind.length];
d.setMilliseconds(0);
d.setSeconds(0);
d.setMinutes(0);
d.setHours(9);
d.setDate(d.getDate() + (7 + 5 - d.getDay()) % 7); // How many days away is Friday from Monday? Add that to the current date.
setTimeout(displayNextItem, +d - timestamp);
}
displayNextItem();
在
localStorage
中保存显示项目和数组索引的时间。然后,当他们回来时,从本地存储中获取时间,将其与当前时间进行比较,如果超过一周,则增加索引并显示下一次。我不确定我是否遵循。您想将延迟(当前为1000毫秒或1秒)更改为1周,但不实际等待1周?这似乎自相矛盾。出于调试目的,您显然希望将其保持在1秒或附近。@Extragorey我想他的意思是他不想使用setInterval()
等待一周。可能是因为用户不会一直打开该页面,所以它不会工作。@Barmar啊,我明白了,在这种情况下,按照您的建议从日历中查找当前一周似乎是一个不错的选择。@axelduch也许,尽管我怀疑您只是每周更改一次邮件,准确的时间其实并不重要。谢谢!!我想我们可能拥有它!!我下周会查一下,然后告诉你。