2017-05-02 2 views
0

Ich versuche, eine Erinnerung Vers eine Woche Programm zu erstellen. Ich habe Code, um das Element anzuzeigen, aber nur mit einer Verzögerung für wie lange ich möchte, dass der Code warten, bevor es Elemente ändert. Wie kann ich jeweils ein Element in einem Array für eine Woche anzeigen und dann zum nächsten Element wechseln, ohne eine Woche auf die Verzögerung warten zu müssen? Das ist, was ich habe jetzt:Wie pro Woche ein Element in einem Array angezeigt wird

<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

Speichern Sie die Zeit, die Sie das Element gezeigt haben, und den Array-Index in 'localStorage'. Dann, wenn sie zurückkommen, holen Sie sich die Zeit vom lokalen Speicher, vergleichen Sie sie mit der aktuellen Zeit, und wenn es mehr als eine Woche dauert, erhöhen Sie den Index und zeigen Sie das nächste Mal. – Barmar

+0

Ich bin mir nicht sicher, ob ich folge. Sie möchten die Verzögerung (derzeit 1000ms oder 1 Sekunde) auf 1 Woche ändern, aber nicht wirklich 1 Woche warten? Das scheint widersprüchlich zu sein. Für Debugging-Zwecke möchten Sie es natürlich bei 1 Sekunde oder etwas in der Nähe behalten. – Extragorey

+0

@Extragorey Ich denke, er meint, er will 'setInterval()' nicht benutzen, um eine Woche zu warten. Wahrscheinlich, weil der Benutzer die Seite nicht die ganze Zeit offen hält, also wird es nicht funktionieren. – Barmar

Antwort

1

Sie die aktuelle Zeit als Index verwenden könnten, die aus dem Jahr 1970 zählen eher als die willkürliche Zeit die Benutzer die Website eingegeben.

Wie des Schreibens, der aktuelle Zeitstempel ist 1493684749486.

var d = new Date(); 
// +d === 1493684749486 

den aktuellen Zeitstempel in ein Array-Index zu konvertieren, müssen Sie die Anzahl der Millisekunden in einer Woche wissen (1000 * 60 * 60 * 24 * 7), dann herauszufinden, wie viele Wochen seit 1970.

var index = Math.floor(+d/(1000*60*60*24*7)); 
// 2469 weeks have passed since 1970 
// output `mind[index]` now. 

aus Gründen der hier Antwort vergangen sind, werde ich Sie ändern möchten den Artikel am Freitag um 09.00 Uhr zu übernehmen. Die nächstgelegene um 9 Uhr Freitag ist 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. 

Die 315.250.514 Millisekunden entfernt. Sie setzen Timeout so lange, bis die nächste Änderung gestartet wird.

Wenn sich das Element ändert, starten Sie eine neue Zeitüberschreitung für die folgende Änderung. Dies wird gegenüber setInterval bevorzugt.

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

Vielen Dank !! Ich denke, wir könnten es haben !! Ich werde es nächste Woche überprüfen und Sie wissen lassen. –

Verwandte Themen