2017-05-02 4 views
0

주간 프로그램 메모리를 만들려고합니다. 나는 아이템을 표시하는 코드를 가지고 있지만, 단지 아이템을 변경하기 전에 기다리는 코드가 길기 때문에 지연 만있다. 일주일 동안 한 번에 하나의 항목을 배열에 표시 한 다음 지연을 위해 일주일 기다리지 않고 다음 항목으로 이동하려면 어떻게해야합니까? 지금 가지고있는 것입니다 :매주 한 항목을 배열에 표시하는 방법

<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); 
+0

'localStorage'에 항목 및 배열 색인을 표시 한 시간을 저장하십시오. 그런 다음 다시 올 때 로컬 저장소에서 시간을 가져와 현재 시간과 비교하고 일주일이 넘으면 색인을 증가시키고 다음 번에 표시합니다. – Barmar

+0

내가 잘 모르겠다. 지연 (현재 1000ms 또는 1 초)을 1 주로 변경하고 싶지만 실제로는 1 주를 기다리지 않으시겠습니까? 그것은 모순 된 것처럼 보인다. 디버깅 목적으로 1 초 또는 그 부근의 값을 유지하고 싶을 것입니다. – Extragorey

+0

@Extragorey 나는 그가 setInterval()을 사용하여 일주일을 기다리는 것을 원하지 않는다고 생각한다. 아마도 사용자가 전체 시간 동안 페이지를 열지 않으므로 작동하지 않을 것입니다. – Barmar

답변

1

사용자가 사이트에 입장 한 임의의 시간이 아닌 현재 시간을 색인으로 사용할 수 있습니다. 글을 쓰는

는, 현재의 타임 스탬프가 1493684749486.

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시 금요일 다음 가장 가까운 315,250,514 밀리 초 거리에 1494000000000.

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을 사용합니다.

항목이 변경되면 다음 변경 사항에 대한 새로운 제한 시간이 시작됩니다. 이것은 setInterval보다 선호됩니다.

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(); 
+0

감사합니다! 나는 우리가 가질지도 모른다라고 생각한다!! 다음 주에 확인하고 알려 드리겠습니다. –

관련 문제