Im Jahr 2006 hatte ich die Idee, einen Live-Wetterfeed auf der Website eines Unternehmens anzuzeigen, wobei die Yahoo Weather API als Quelle diente. Damals war der einzige Weg, dies effektiv zu tun, die Verwendung von Flash, und dies war etwas, das das Unternehmen aufgrund des Entwicklungsaufwands nicht wollte.
Sechs Jahre später, als technischer Direktor meines eigenen Unternehmens, Engage Web, habe ich diese Idee für unser neu umgestaltetes Unternehmen wieder aufgegriffen und sie um einige Stufen weiterentwickelt. Im Jahr 2012 war Flash nicht mehr notwendig, da alles, was 2006 damit gemacht werden konnte, jetzt mit CSS3 Keyframes gemacht werden konnte.
Wir machten uns mit ehrgeizigen Plänen auf den Weg, damit unsere Website die Live-Wetterbedingungen für jeden, der sie betrachtete, anhand seiner Geolokalisierung anzeigt. Wir wollten, dass die Tageszeit je nach seinem Standort in der Welt reflektiert wird, sodass jemand, der die Website in London, England, betrachtete, einen anderen Stil sah als jemand, der die Website zur gleichen Zeit in San Diego, Kalifornien, betrachtete. Das Ziel war, dass die Leute durch den Blick auf unsere Website sehen konnten, wie das Wetter draußen vor ihrem Fenster war.
Hier sind nur einige Beispiele für den Endzustand, den der Header der Website zu jeder Zeit haben kann







Leider stießen wir auf einige unmittelbare technische Schwierigkeiten, die durch den alten Feind des Webentwicklers, den Internet Explorer, verursacht wurden. IE konnte die Geolokalisierung nicht verarbeiten, sodass eine genaue Annäherung des Standorts einer Person vom Browser aus nicht möglich war. Stattdessen mussten wir eine IP-Lookup-API verwenden, um den Standort des Benutzers zu ermitteln, die nur bis zur nächstgelegenen Hauptstadt (oder Großstadt) des Benutzers genau ist. Dafür haben wir ipinfodb.com verwendet. Basierend auf der auf dieser Website eingegebenen IP-Adresse gibt diese das Land, den Bundesstaat/die Provinz und die Stadt/Gemeinde des Benutzers zurück. Wir benötigten nur das Land und die Stadt/Gemeinde, die dann in die Yahoo Weather API eingespeist wurden und Live-Wetterdaten für die Region zurückgaben.
Wenn von ipinfodb.com keine Daten zurückgegeben werden (z. B. wenn die Website jemals ausgefallen wäre oder IP-Daten vom Benutzer nicht abgerufen werden könnten), wird der Standort standardmäßig auf London, England, gesetzt.
Sowohl die Yahoo Weather API als auch ipinfodb.com liefern Längen- und Breitengrade, die dann verwendet werden, um die Zeiten für Sonnenuntergang und Sonnenaufgang zu berechnen, was wiederum den Sonnenaufgang und Sonnenuntergang auf der Website auslöst.
Das letzte i-Tüpfelchen ist die Mondphase, die die komplizierteste aller Berechnungen war, obwohl sie nur das Datum als Variable benötigte.
Ob Regen oder Sonnenschein
Beginnen wir mit dem Wetter. Yahoo gibt die Wetterinformationen in Form einer Zahl zurück, derzeit zwischen 0-47, mit einer Fehlernummer 3200 für keine Informationen. Jede dieser Zahlen repräsentiert einen anderen Wettertyp.
0 tornado
1 tropical storm
2 hurricane
3 severe thunderstorms
4 thunderstorms
5 mixed rain and snow
6 mixed rain and sleet
7 mixed snow and sleet
8 freezing drizzle
9 drizzle
10 freezing rain
11 showers
12 showers
13 snow flurries
14 light snow showers
15 blowing snow
16 snow
17 hail
18 sleet
19 dust
20 foggy
21 haze
22 smoky
23 blustery
24 windy
25 cold
26 cloudy
27 mostly cloudy (night)
28 mostly cloudy (day)
29 partly cloudy (night)
30 partly cloudy (day)
31 clear (night)
32 sunny
33 fair (night)
34 fair (day)
35 mixed rain and hail
36 hot
37 isolated thunderstorms
38 scattered thunderstorms
39 scattered thunderstorms
40 scattered showers
41 heavy snow
42 scattered snow showers
43 heavy snow
44 partly cloudy
45 thundershowers
46 snow showers
47 isolated thundershowers
Wir haben die Wettertypen dann in vier Zahlen aufgeteilt. Die erste Zahl steuert die Wolken, wie hell oder dunkel sie sind und wie dicht sie sind. Die zweite Zahl steuert den Regen. Es gibt verschiedene Abstufungen von Regen auf der Website, von leichten Schauern bis zu starken Güssen. Die dritte Zahl steuert Effekte wie Blitze oder Schnee, und die vierte Zahl ist für zufällige Effekte wie Staub oder Nebel.
$weatherarray[39]=array('scattered thunderstorms',3,2,5,2);
$weatherarray[40]=array('scattered showers',3,2,0,2);
$weatherarray[41]=array('heavy snow',1,0,3,0);
Einer der häufigsten Effekte, die wir in Großbritannien sehen, ist Regen (wir haben viel Regen), also hier ist, wie der Regen-Effekt auf unserer Seite gemacht wird. Das untenstehende animierte Regen-GIF wird mit einer geeigneten Opazität angezeigt, abhängig davon, wie stark der Regen laut Yahoo Weather API gemeldet wird. Unser früherer Code nimmt die Informationen von Yahoo und weist Variablen für die Regenintensität zu, und diese Variablen steuern die Opazität des animierten Regen-GIFs im folgenden Code.


switch ( $effect1) {
case 0:
$weathercode.= '
jQuery(\'#rain\').css("opacity", "0.0");
';
break;
case 1:
$weathercode.= '
jQuery(\'#rain\').css("opacity", "0.10");
';
break;
case 2:
$weathercode.= '
jQuery(\'#rain\').css("opacity", "0.30");
';
break;
case 3:
$weathercode.= '
jQuery(\'#rain\').css("opacity", "0.50");
';
break;
}
Vollmond, Halbmond, totale Finsternis
Der schwierigste Teil des gesamten Prozesses war die Mondphase. Dazu haben wir ein großes Bild erstellt, das 10 verschiedene Variationen der Mondphasen anzeigt. CSS entscheidet dann, wie das richtige Bild basierend auf den Daten angezeigt wird, die von einem PHP-Skript zurückgegeben werden (dessen Berechnungen buchstäblich astronomisch sind).
background-position: <?php echo $moonbgimagepos; ?>px 0;


Das Skript zur Berechnung der Mondphase wurde aus Code abgeleitet, der hier zu finden ist.
300 Sekunden bis Sonnenuntergang
Das i-Tüpfelchen des Projekts ist der Sonnenuntergangs- und Sonnenaufgangseffekt, der je nach tatsächlichen Sonnenuntergangs- und Sonnenaufgangszeiten am Standort der Person, die die Website betrachtet, auftritt. Mithilfe der zuvor erwähnten Längen- und Breitengrade wird die Zeit des Sonnenuntergangs und Sonnenaufgangs (abhängig davon, ob es gerade Tag oder Nacht ist) extrapoliert, in einen Unix-Zeitstempel umgewandelt und als Variable gespeichert.
Die aktuelle Zeit wird ebenfalls in einen Unix-Zeitstempel umgewandelt und die Differenz zwischen der Sonnenuntergangs- oder Sonnenaufgangszeit und der aktuellen Zeit wird als Timeout auf eine jQuery-Funktion angewendet, die die Übergänge zwischen Tag und Nacht und umgekehrt steuert.
Das folgende jQuery steuert den Übergang zwischen drei Phasen. Beim Sonnenuntergang wird der „Tageslicht“-Hintergrund ausgeblendet und durch einen orangefarbenen Glüh-Hintergrund (für Sonnenuntergang und Sonnenaufgang verwendet) ersetzt, der dann in einen Nacht-Hintergrund ausgeblendet wird. Während dies geschieht, beginnt die Sonne ihren Abstieg von der Oberseite der Seite zur Unterseite, was 300 Sekunden dauert.
jQuery('#daytime').fadeOut(200000, 'linear', function() {
jQuery('#sill').fadeOut(100000, 'linear', function() {});
jQuery('#sunset').fadeOut(100000, 'linear', function() {});
});
Während dies geschieht, werden auch alle relevanten Wettereffekte auf den Bildschirm gelegt, wie Regen, Schnee, Blitze und Wolkenbewegungen. Als zusätzlicher Effekt wechselt auch die Skyline von einem Tag- zu einem Nacht-Thema, um zu zeigen, wie die Gebäude in Dunkelheit versinken und die Lichter der Stadt angehen.
Arbeitstag und Nacht
Als zusätzlicher Effekt werden die zusätzlichen Stilelemente der Website, wie z. B. Farbgebungseffekte, geändert, je nachdem, ob die Zeit Tag oder Nacht ist. Dies geschieht durch die Verwendung einer PHP-Datei als CSS, nachdem die Variablen festgelegt wurden.
<link rel="stylesheet" type="text/css" href="/css/styleweather.php" />
Wenn Sie die Website jedoch gerade beim Sonnenuntergang oder Sonnenaufgang erwischen, sehen Sie, wie sich die Skyline und das Website-Thema ändern, wenn der Tag in die Nacht übergeht und umgekehrt. Der folgende Code steuert dies mit jQuery
jQuery('#backmask').animate( {
color: '#fff',
backgroundColor: '#48508b'
},300000, 'linear' );
jQuery('#menu-top-menu li,#blogmenu,#searchbox, #times').animate( {
color: '#fff',
backgroundColor: '#48508b'
},300000, 'linear' );
jQuery('#Phone').animate( {
color: '#fff',
backgroundColor: '#48508b',
boxShadow: '0 -10px 10px 4px #2A3160 inset'
},300000, 'linear' );
Test, Test, 123
Beim Erstellen von etwas, das durch die Sonnenuntergangs- und Sonnenaufgangszeiten ausgelöst wird, die aus der Längen- und Breitengrad des Benutzers abgeleitet werden, war das Testen des Effekts eine eigene Mission. Dies erforderte die Ermittlung, wo auf der Welt die Sonne gerade aufging, und dann die Verbindung zur Website über einen Proxyserver in diesem Land, um die Zeitpläne zu überprüfen. Wir haben bei diesem Projekt viel über Geografie, Zeitzonen und Sonnenaufgangszeiten gelernt!
Hier ist ein Screenshot von der Website mit dem funktionierenden Effekt

Dank an den Designer/Entwickler Steven Morris für die Designarbeit an diesem Projekt.
Großartige Arbeit, Darren.
Ich liebe das kreative Denken hinter diesem Projekt. Und die Art und Weise, wie es funktioniert… Großartig!
Leute wie du (und du, Chris, natürlich ;) ) halten mich davon ab, eine neue Karriere in dieser riesigen Welt des Webdesigns/Frontend-Entwicklung anzustreben.
Danke!
Vor nicht allzu langer Zeit habe ich von einem solchen Projekt geträumt, abzüglich der Motivation, es tatsächlich umzusetzen. Etwas wie dieses könnte ein Projekt in künstlicher Intelligenz unterstützen – das aktuelle Wetter könnte beeinflussen, in welcher Stimmung Ihre Online-KI-Kreation ist.
Aktuelle Ereignisse könnten auch bestimmen, in welcher Stimmung ein Online-KI-Bot wäre. Es könnte zahlreiche Möglichkeiten geben, etwas, das in den Nachrichten gut oder schlecht ist, zu indizieren – aber für die KI, eine Meinung zu einem aktuellen Ereignis zu bilden, klingt sehr schwierig.
Gute Kreativität von Darren.
Hallo, kannst du mir im Bereich CSS helfen? Ich habe einige Probleme beim CSS-Design.
Ich schaffe es nicht. Brauche ich Übung? Führe mich, damit ich CSS lernen kann.
Vielen Dank
Eine aussergewöhnliche Kreativität. Tolle Arbeit, Darren, es ist schade, dass IE auch im Jahr 2012 noch suckt!
Schönes Zeug! Ich habe dasselbe mit einer Seite gemacht, die nie gestartet wurde. Ich habe den Standort des Benutzers genommen, eine Google-Karte erstellt, die auf den Standort des Benutzers zentriert ist, dann mit dem Google-Wetter (das funktioniert wahrscheinlich nicht mehr) nachgesehen und dann eine Ebene (mit Opazität auf einen netten Wert gesetzt) mit einem Bild des Wetters (Regen, Schnee, Wolken usw.) hinzugefügt. Wenn ich Zeit habe, könnte ich vielleicht auch die Anleitung irgendwo posten :) Tolle Arbeit!
Vielen Dank für die tollen Kommentare, Leute. Ich muss Chris heute eine E-Mail schreiben und den Namen unseres Designers hier hinzufügen, da die ganze harte Arbeit von ihm kam. Der Typ, der dieses verrückte Projekt programmiert hat, ist Steven Morris – er verdient das Lob.
Wow! Das ist erstaunlich :D
Das ist genau das, was ich für eine Boots-Website implementieren muss. Inspiriert!
Gibt es einen Grund, warum du jQuery anstelle von $ verwendest?
Das dient der Sicherstellung von noConflict.
Interessant. Was ist noConflict genau? Bedeutet es, dass ein anderes Programm das Dollarzeichen verwendet?
Ja, Charles von codeconquest, genau deshalb!
jQuery oder $ ist nicht die einzige Javascript-Bibliothek, die $ verwendet. Ich werde nicht vorgeben, alles im Detail zu wissen, daher empfehle ich, sich http://api.jquery.com/jQuery.noConflict/ anzusehen, um zu erfahren, wie Sie verhindern können, dass Ihre Bibliotheken miteinander kollidieren!
Ausgezeichneter Artikel! Hey Chris – findest du nicht, dass es schön wäre, wenn wir den „Tweet“-Button und den „Like“-Button für Artikel hätten?
Schönes Konzept, aber die Ausführung ist bestenfalls schlampig. Man sieht blaue Pixel, wo die Gebäudebilder nicht richtig ausgeschnitten wurden, keine Kantenglättung bei besagten Gebäuden und niedrig aufgelöste Bilder, die für alles verwendet werden. Der Rest der Seite ist ehrlich gesagt ein ähnliches Durcheinander. Hässliche Silber-Verläufe von vor einem Jahrzehnt auf den Menüschaltflächen, eine Fußzeile, die fehl am Platz aussieht (ernsthaft, wo ist der Übergang?), Teilen-Buttons in der verdammten Kopfzeile. Tun Sie sich einen Gefallen und feuern Sie Ihren Designer.
Ich sage Ihnen, was niemand sonst das Herz hat zu sagen, seit 1985.
Ich muss zustimmen. Die Seite lässt viel Raum für Interpretationen. Obwohl sie ein Social-Media-Unternehmen sind, machen für mich die Teilen-Buttons oben irgendwie Sinn. Und nur weil das Logo in diesem Lila gehalten ist, heißt das nicht, dass der Rest der Seite das auch sein muss. Das ist alles.
Ich liebe es, das ist brillant
Code-Ninja. Brillant!
Was für ein wahnsinniger Beitrag. CSS-Tricks ist immer randvoll mit coolem Zeug, aber das setzt den Standard.
Konzeptionell brillant. Die Ausführung ist fragwürdig.
Tolle IDEE
Du hast einen Tippfehler im ersten Satz, ich bin ziemlich sicher, dass du nicht der technische Direktor*in* bist :)
Wir sind unwürdig! Tolle Sache.
Lob an Steven Morris.
Ich liebe auch den Ansatz mit den Mondphasen. Ich habe die Lektüre und die „Beharrlichkeit“, die für ein solches Unterfangen erforderlich sind, sehr genossen.
Sehr gute Arbeit und danke fürs Teilen!
Wenn ich einen Beitrag wie diesen sehe, erkenne ich, dass ich in Bezug auf all dies immer noch ein Grünschnabel bin… erstaunlicher Beitrag… Danke, dass du dein Wissen teilst…
Dunstan hat das vor ein paar Jahren gemacht.
Kann mir jemand sagen, wie ich diesen großartigen Kram herunterladen kann?
Toller Beitrag, Darren, ich liebe das Konzept.
Ich habe vor ein paar Wochen ein ähnliches Projekt begonnen, der einzige Unterschied ist, dass das Wetter mit einer cartoonhaften WebGL-3D-Szene unter Verwendung von three.js angezeigt wird. Ich habe jedoch ein großes Problem. Auf der Yahoo Weather API-Website heißt es:
„Für den Wetter-RSS-Feed gibt es zwei Parameter
w für WOEID.
u für Grad-Einheiten (Fahrenheit oder Celsius).
Der WOEID-Parameter w ist erforderlich. Verwenden Sie diesen Parameter, um den Standort für die Wettervorhersage als WOEID anzugeben.“
Wie können Sie die WOEID für den Standort des Kunden dynamisch finden?
Danke
J
Sie können die Yahoo API mit Ortsnamen, Längen- und Breitengraden sowie anderen Werten abfragen, und sie gibt Ihnen eine WOEID zurück.
Sie benötigen einen Yahoo API-Schlüssel, aber die Abfrageadresse lautet http://where.yahooapis.com/geocode, fügen Sie dann Ihre Parameter hinzu.
Es akzeptiert sogar einfachen Text wie „london“ oder „Glasgow“.
Ich hoffe, das hilft.
Genau das, was ich brauchte, vielen Dank!
Jonas
Wählt es den Standort des Besuchers automatisch aus oder werden nur manuell ausgewählte Städte angezeigt?
Und wie wirkt sich das Plugin auf die Ressourcennutzung aus?
Grüße
Hallo Chris (und Darren) – toller Artikel und ich liebe die Art, wie Sie CSS bis an seine Grenzen treiben, ich habe jetzt eine zusätzliche Herausforderung für Sie… für die ich keine Ahnung habe, ob sie erreicht werden kann.
Wenn es regnet, ist es eher traurig und die erzeugte Wettergrafik wäre dunkel, regnerisch und uninspirierend… also, könnte es stattdessen möglich gemacht werden, einen Blick auf die Vorhersage zu werfen und uns zu sagen, wann es das nächste Mal sonnig sein würde (gutes Wetter). Könnten Sie den PHP-Code so gestalten, dass er die Yahoo API abfragt und den nächsten sonnigen Tag für diese IP findet.
Dann könnten Sie immer ein sonniges Bild und vielleicht eine Nachricht anzeigen: „Keine Sorge – es wird bei Ihnen am Dienstag wieder sonnig sein… usw.“
Wäre vielleicht benutzerfreundlicher, als den Leuten nur zu sagen, wie ihr Wetter gerade ist.
Toller Artikel, Darren! Das ist eine wirklich kreative Technik, die Sie hier angewendet haben.
Sehr gute Tipps, danke fürs Teilen, Darren!
Ich liebe das, sehr schön, das Wissen zu teilen :) Danke
Toller Artikel! Vielen Dank!
WOW, großartig! Sachen
Das ist absolut großartige Arbeit. Obwohl das nicht einfach ist – das ist nichts als fantastisch. Das ist etwas, worüber man nach Hause schreiben kann. Großartige Arbeit!!
2007 habe ich das für NYC gemacht. Das Wetter, die Tageszeit, die Mondphase und die Farben des Empire State Buildings stimmten alle mit der realen Welt überein. Manchmal war der Blick aus meinem Fenster unheimlich ähnlich, manchmal nicht so sehr. Aber einmal im Jahr 2009 schneite und donnerte es in NYC, und ich war so froh, dass ich das eingebaut hatte, auch wenn es nur 1 oder 2 glorreiche Stunden sichtbar war.
http://newyorkontap.com/newyorkskyline.asp