2016-07-12 12 views
1

Ich versuche, ein Feature in eine Wetter-App zu integrieren, die ich mache, wo die Hintergrundfarbe langsam zwischen hellblau und einem marineblauen Violett zwischen Sonnenaufgang und Sonnenuntergang wechselt und umgekehrt. Teile meines Codes, die entsprechende Code ist unten ist, können Sie das gesamte Projekt hier ansehen:Wie ändere ich die Hintergrundfarbe basierend auf der Zeit von Sonnenaufgang bis Sonnenuntergang mit jQuery/jQueryUi?

http://codepen.io/stephepush/pen/pbWwog

var sun = "http://api.sunrise-sunset.org/json?lat=" + lat + "&lng=" + lon + "&date=today"; 
    $.getJSON(sun, function(sunData){ 
    var sunUp = sunData.results.sunrise; 
    var sunDown = sunData.results.sunset; 
    var sunStatus = sunData.status; 
    var nowEpoch = (Date.now())(1000) 

     $("body").animate({'background-color':'#56c1ff'},nowEpoch - ((sunDown)*(1000)), 'linear');` 
+1

Und ist Ihre Frage ...? – j08691

+0

Welche Bibliothek könnte ich verwenden? Welche Methoden? Bin ich auf dem richtigen Weg? – DeltaFlyer

+1

Ihr Code scheint mehr oder weniger zu funktionieren. Es gibt ein paar Möglichkeiten und einige undefinierte Variablen, aber es scheint konzeptionell in Ordnung zu sein. Eine Sache, die Sie wahrscheinlich ändern müssen, ist von "Sunup to Sundown" zu mischen, wie das in der Theorie von der Dämmerung bis zur Dämmerung vermischt. Vielleicht sollten Sie eine mittägliche Farbe definieren und einarbeiten. – JonSG

Antwort

1

Konzeptionell ist dies Ihr Code. Wir beginnen mit der Morgenfarbe (#fff) und über einen gewissen Zeitraum hinweg vermischen wir uns mit der Abendfarbe (# 000).

Ein paar Dinge obwohl.

Erstens, in Ihrem Code subtrahieren Sie jetzt von Sonnenuntergang. Du willst das anders herum machen.

Zweitens mischen Sie von einer Dämmerung (Morgen) zu einer zweiten Dämmerung (Abend). Dies ist wahrscheinlich sehr subtil. Sie brauchen eine Mischung, um den ganzen Tag in der Mitte oder Ihr Hintergrund wird den ganzen Tag wie Dämmerung aussehen.

var now = (new Date()).getTime(); 
 
var fakeMidnight = now + (30 * 1000); 
 
var untilMidnight = (fakeMidnight - now); 
 

 
console.log("it will become night over the next : " + (untilMidnight/ 1000) + " seconds.") 
 
$("body").animate({'background-color':'#000'}, (fakeMidnight - now), 'linear')
body { background-color:#fff; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>

+0

Sollte die Variable bis Mitternacht nicht zuerst deklariert werden und dann in gefälschter Mitternacht verwendet werden? Ich benutze die Unix-Epoche, also wenn die aktuelle Epoche tally für var verwendet und dann Mitternacht * 1000 hinzugefügt hat, was die Epoche um Mitternacht ist, würde das nicht einfach die Anzahl der Sekunden nach 92 Jahren mal 1000 addieren? Subtrahiere jetzt von midNight (oder fakeMidnight, kehre die Gleichung bis Mitternacht um) und füge dann diese Zahl hinzu und verwende diese Zahl als Zeitintervall der Änderung? – DeltaFlyer

+1

** fakeMidnight ** ist eine Variable, die konzeptionell die kommende Mitternacht repräsentiert ** ((new Date()). SetHours (24,0,0,0)) ** aber das würde keine sehr lebendige Demo machen, also ich setze es in Zukunft auf 30 Sekunden. In Ihrem Beispiel könnte das eher "Sonnenuntergang" sein, da Sie dies als letzte Zielzeit verwenden. ** bis Mitternacht ** ist die Anzahl der ms zwischen ** jetzt ** und ** fakeMidnight **. Dies teilt Ihrer Animation mit, wie lange die Mischung dauert. Um es zu bekommen, würdest du ** jetzt ** von ** fakeMidnight ** subtrahieren – JonSG

+0

In Ordnung. Ich habs. Danke vielmals. – DeltaFlyer