So programmieren Sie eine Scrolling-Website „Alien Lander“

In diesem Tutorial, dem zweiten Teil einer zweiteiligen Serie, nehmen wir die fantastische vektorbasierte Illustration, die in Yulia Sokolovas „Wie man einen langen Hintergrund für eine Website erstellt“ erstellt hat, in eine Live-Site.

Was wir bauen werden

Wir werden die Dinge so zusammenstellen, dass, wenn Sie vom oberen Rand der Seite nach unten scrollen, ein "Alien Lander" erscheint, der seinen Weg zum Aufsetzen sucht. Am Anfang sehen wir ein UFO im Weltraum schweben.

Wenn wir nach unten scrollen, erreicht das UFO die Atmosphäre und wird zu einem "außerirdischen Kometen".. 

Und schließlich, wenn es durch die Baumgrenze geht, wird es zu einem „kleinen grünen Mann“, der auf dem Boden landet.

Sehen Sie sich die Live-Demo an!

SVG-Bilder

In diesem Projekt verwenden wir SVG-Bilder, damit wir deren flüssige Neuskalierung und ihre geringe Dateigröße nutzen können.

Bevor wir mit dem Programmieren beginnen, benötigen Sie das in Teil 1 dieser Tutorial-Serie erstellte Image, das in vier SVG-Dateien unterteilt ist:

  1. Das UFO als Datei mit dem Namen "ufo.svg"
  2. Der "alien comet" als Datei mit dem Namen "alien_comet.svg"
  3. Der "kleine grüne Mann" als Datei namens "alien_landing.svg"
  4. Das Hintergrundbild mit den obigen drei Elementen wurde als Datei mit dem Namen „background.svg“ entfernt.

Sie können diese SVG-Bilder selbst aus Ihrer bevorzugten Grafik-App exportieren, wenn Sie möchten, oder Sie finden alle vier Bilder in den Quelldateien von GitHub für die Verwendung bereit.

Setup-Grundstruktur

Erstellen Sie einen neuen Ordner für Ihr Projekt und erstellen Sie darin einen Unterordner mit dem Namen "css" und einen weiteren mit dem Namen "images"..

Kopieren Sie Ihre vier SVG-Bilder und fügen Sie sie in den neuen Ordner "images" ein.

Erstellen Sie im Ordner "css" eine Datei mit dem Namen "style.css"..

Erstellen Sie im Hauptordner eine neue Datei mit dem Namen "index.html"..

Ihre Ordnerstruktur sollte jetzt so aussehen:

Fügen Sie in der Datei "index.html" den folgenden grundlegenden HTML-Code hinzu, um das Wesentliche in das Stylesheet zu laden und das Stylesheet zu laden:

    Alien Lander scrollen     

Fügen Sie den Hintergrund hinzu

Es mag kontrapunktisch erscheinen, aber wir werden unser Hintergrundbild tatsächlich mit einem hinzufügen img Element und nicht als CSS-Hintergrundbild. Wir machen das, weil:

  1. Wir möchten SVGs Fähigkeit zur Größenänderung nutzen, indem wir das gesamte Ansichtsfenster mit unserem Bild „background.svg“ füllen, unabhängig von den Abmessungen des Browserfensters.
  2. Damit die Bildlauftechnik funktioniert, müssen wir die Höhe des Hintergrundbilds kennen.
  3. Da wir das Hintergrundbild fließend skalieren lassen, haben wir keine Möglichkeit, die Höhe im Voraus zu bestimmen.
  4. Da wir die Höhe des Hintergrundbildes nicht im Voraus wissen können, müssen wir es nach dem Laden des Bildes erkennen.
  5. Wenn Sie „background.svg“ als CSS-Hintergrundbild festlegen, hat dies keine Auswirkung auf das Site-Layout.
  6. Durch Einfügen von "background.svg" als reguläres Bild statt seiner Höhe werden Das Layout der Site wird so beeinflusst, dass die Höhe mit jQuery relativ einfach erkannt werden kann.

Nun, da Sie wissen, warum wir diesen Ansatz verfolgen, beginnen wir mit der Codierung!

Fügen Sie in Ihrer "index.html" -Datei diesen Code hinzu:

Wenn Sie jetzt eine Vorschau Ihrer Datei in einem Browser anzeigen, sollte das Bild das Ansichtsfenster ausfüllen. Es gibt jedoch immer noch etwas weißen Raum um die Kanten. 

Dies liegt daran, dass Browser einen kleinen Rand in der Karosserie Element standardmäßig Um dies zu überschreiben, fügen Sie in der Datei "style.css" dieses CSS hinzu:

body margin: 0; 

Es gibt auch einen anderen Browser-Standard, den wir überschreiben müssen, den des Anzeige Eigenschaft für Bilder, die auf festgelegt werden in der Reihe. Wenn Sie zum unteren Rand Ihrer Seite scrollen, sehen Sie, dass sich aufgrund dieses Standardwerts derzeit ein kleines weißes Feld unter dem Bild befindet. Ändern Sie es, indem Sie Folgendes hinzufügen:

img display: block; 

Jetzt sollte das Bild "background.svg" das Fenster bündig mit den Kanten füllen. Wenn Sie die Breite des Fensters ändern, wird das SVG-Bild selbst neu skaliert, um es an die neue Größe anzupassen. Die Höhe des Site-Layouts ändert sich ebenfalls, um das korrekte Seitenverhältnis für das Hintergrundbild „background.svg“ beizubehalten.

Fügen Sie einen Vordergrundcontainer hinzu

Damit sich das soeben platzierte Bild als Hintergrundbild verhält, benötigen wir eine Möglichkeit, den Rest unseres Inhalts über den Vordergrund zu legen. Wir können dies durch Hinzufügen von a erreichen div Element, das als Container fungiert und sein Element ändert Position und z-index Eigenschaften.

Fügen Sie in Ihre Datei "index.html" nach dem gerade hinzugefügten Bild dieses neue div ein:

 

Und in "style.css" fügen Sie dieses CSS hinzu:

.Vordergrund Position: absolut; oben: 0; links: 0; Höhe: 100%; Breite: 100%; z-Index: 1; 

Lassen Sie uns durchgehen, was wir mit dem obigen Code tun.

Zuerst durch Einstellung Position zu absolut Wir nehmen das Element aus dem regulären Dokumentenfluss heraus (wodurch es sonst unter dem Hintergrundbild platziert würde), sodass wir es an einem beliebigen Ort platzieren können.

Dann setzen wir die oben und links Eigenschaften zu 0 Dadurch wird das Element an den oberen Rand des Fensters verschoben und horizontal an unserem Hintergrundbild ausgerichtet.

Danach geben wir das Element ein Höhe und Breite von 100%. Dadurch wird sichergestellt, dass das Element nicht zusammenbricht und jeglichen Inhalt darin ausgeblendet wird.

Zum Schluss setzen wir die z-index zu 1 Dadurch wird das Element nach vorne gerückt, sodass es vor unserem Hintergrundbild (das standardmäßig eingestellt ist) sitzt z-index von auto). Dadurch wird verhindert, dass der Inhalt des Elements durch das Hintergrundbild verdeckt wird.

In unseren Vordergrund-Container können jetzt Inhalte eingefügt werden.

Fügen Sie das UFO-Panel hinzu

Wir wollen, dass unser UFO unten auf dem Boden „landet“, indem wir drei Panels erstellen, eines für jede Landestufe. Wir fügen dann das entsprechende SVG-Bild für jedes Feld, z. B. die Datei "ufo.svg", als Hintergrundbild mit fester Position hinzu. Das Bild bleibt dann während des Bildlaufs in Position, während sich der Hintergrund dahinter bewegt, wodurch die Illusion des Abstiegs erzeugt wird.

In deinem "Vordergrund" div, füge dieses neue hinzu div:

Fügen Sie nun folgenden Code zu Ihrem CSS hinzu:

.ufo_section height: 100%; Hintergrund: URL (… /images/ufo.svg); Hintergrundwiederholung: keine Wiederholung; Hintergrundposition: Mitte; Hintergrundgröße: 40% Auto; Hintergrundaufsatz: feststehend; 

In der ersten Zeile unseres obigen Codes geben wir das Element a an Höhe von 100% um sicherzustellen, dass der Inhalt sichtbar ist. Dann fügen wir unser Bild "ufo.svg" als Hintergrund hinzu. Wir setzen ein Hintergrund Wiederholung zu keine Wiederholung Wir möchten, dass nur ein UFO erscheint und wir machen dann Hintergrundposition platzieren Sie das Bild horizontal und vertikal in der Mitte.

Mit unserer Hintergrundgröße Bei dieser Eigenschaft legen wir die Breite als prozentualen Wert fest und ermöglichen die automatische Berechnung der Höhe. Diese Breite wird aus dem ursprünglichen Vektorbild gezeichnet, in dem die Breite des UFO ungefähr 40% der Breite der Gesamtdarstellung beträgt.

Durch die Einstellung der Breite unseres Bildes "ufo.svg" als Prozentsatz, wenn das Fenster die Größe ändert und das Bild "background.svg" sich mit ändert, passt das UFO-Bild auch seine Breite an, um die beabsichtigten Proportionen beizubehalten.

In der letzten Zeile setzen wir Hintergrundanhang zu Fest, Das bedeutet, dass das Bild beim Scrollen fixiert bleibt, was uns die Illusion des Abstiegs gibt.

Aktualisieren Sie Ihre Seite und scrollen Sie jetzt - Sie sollten das UFO in vertikaler Richtung zwischen den Planeten sehen.

Fügen Sie die Kometen- und Landepanels hinzu

Wenn Sie auf Ihrer Website nach unten scrollen, werden Sie feststellen, dass das UFO verschwindet, wenn Sie weit genug nach unten gehen. Dies geschieht, weil wir über die Höhe von rollen ufo_section Panel, so können wir zu diesem Zeitpunkt den Hintergrund nicht mehr sehen. 

Wir werden drei solcher Panels übereinander stapeln, so dass der Hintergrund des folgenden Panels verschwindet, wenn wir an einem vorbei scrollen und sein Hintergrund verschwindet erscheint, So entsteht der Effekt, dass ein Bild durch das nächste ersetzt wird.

Wir wiederholen also den oben beschriebenen Vorgang, um die Images „alien_comet.svg“ und „alien_landing.svg“ einzufügen.

Fügen Sie Ihrem HTML-Code das Folgende direkt nach Ihrem hinzu ufo_section div und noch in deinem Vordergrund div:

Dann fügen Sie Ihrem CSS diese neuen Klassen hinzu:

.comet_section height: 100%; Hintergrund: URL (… /images/alien_comet.svg); Hintergrundwiederholung: keine Wiederholung; Hintergrundposition: Mitte; Hintergrundgröße: 15% Auto; Hintergrundaufsatz: feststehend;  .landing_section height: 100%; Hintergrund: URL (… /images/alien_landing.svg); Hintergrundwiederholung: keine Wiederholung; Hintergrundposition: Mitte; Hintergrundgröße: 15% Auto; Hintergrundaufsatz: feststehend; Position: relativ; 

Wir verwenden hier den gleichen Code und die gleichen Techniken, wobei nur die Namen der Bilddateien geändert wurden und die Breite auf der Hintergrundgröße Eigenschaft auf festgelegt fünfzehn% passend zu den schmaleren Bildern, die wir gerade hinzugefügt haben.

Ihr abgeschlossenes CSS

Ihre "style.css" -Datei ist nun fertig und sollte den folgenden Code enthalten:

body margin: 0;  img display: block;  .foreground position: absolut; oben: 0; links: 0; Höhe: 100%; Breite: 100%; z-Index: 1;  .ufo_section height: 100%; Hintergrund: URL (… /images/ufo.svg); Hintergrundwiederholung: keine Wiederholung; Hintergrundposition: Mitte; Hintergrundgröße: 40% Auto; Hintergrundaufsatz: feststehend;  .comet_section height: 100%; Hintergrund: URL (… /images/alien_comet.svg); Hintergrundwiederholung: keine Wiederholung; Hintergrundposition: Mitte; Hintergrundgröße: 15% Auto; Hintergrundaufsatz: feststehend;  .landing_section height: 100%; Hintergrund: URL (… /images/alien_landing.svg); Hintergrundwiederholung: keine Wiederholung; Hintergrundposition: Mitte; Hintergrundgröße: 15% Auto; Hintergrundaufsatz: feststehend; Position: relativ; 

Gehen Sie jetzt zurück zu Ihrer Website, scrollen Sie nach unten und Sie sollten sehen, wie das UFO in den Kometen verwandelt wird, und etwas weiter unten in den "kleinen grünen Mann"..

Plattenhöhenberechnungen hinzufügen

Im Moment werden Sie feststellen, dass wir beim Scrollen einige Probleme lösen müssen.

  1. Die drei Platten sind jeweils nicht hoch genug. Dies lässt den Anschein erwecken, als würde der Alien-Lander zu früh von einer Form in die andere übergehen, so dass er niemals zu Boden geht.
  2. Das Bild "alien_comet.svg" wird angezeigt, bevor das Bild "ufo.svg" vollständig verschwunden ist, was ungerade aussieht.

Da das Bild „background.svg“ keine feste Größe hat, wissen wir nicht genau die Pixelhöhe, die jedes Panel vor dem Laden haben sollte. Wir können jedoch im Vorfeld entscheiden, wie hoch die Höhe jedes Paneels als Prozentsatz der Höhe von „background.svg“ sein sollte..

Mit jQuery können wir diesen Prozess implementieren:

  1. Definieren Sie die Höhe, die jedes Panel als Prozentsatz (oder Bruchteil) der Höhe des Hintergrundbilds „background.svg“ haben soll.
  2. Ermitteln Sie die Höhe von "background.svg" nach dem Laden.
  3. Berechnen und setzen Sie die Höhen der Panels basierend auf den beiden obigen Informationen.

Wenn wir gerade dabei sind, fügen wir ein paar zusätzliche leere divs hinzu, um als Abstandhalter zwischen den einzelnen Bereichen zu fungieren und ihre Höhe auch mit jQuery festzulegen. Durch Hinzufügen von Leerzeichen zwischen den Bedienfeldern wird ein reibungsloser Übergang erzielt, wodurch das Problem gelöst wird, dass das Bild „alien_comet.svg“ angezeigt wird, bevor das Bild „ufo.svg“ verschwunden ist.

Aktualisieren Sie Ihren HTML-Code, so dass zwischen jedem vorhandenen div ein Spacer-Div steht, z.

Laden Sie im Kopfbereich in jQuery, indem Sie Folgendes hinzufügen:

Richten Sie die JavaScript-Funktion ein

Vor dem Schluss Tag, erstellen Sie ein Paar Tags und Einrichtung einer neuen Funktion wie folgt:

Wir möchten, dass diese Funktion ausgelöst wird, wenn die Seite zum ersten Mal geladen wird, und wenn die Größe geändert wird. Fügen Sie daher nach dem Öffnen den folgenden Code hinzu Skript Etikett:

$ (document) .ready (function () set_section_heights ();); $ (window) .resize (function () set_section_heights (););

Holen Sie sich die Höhe des Hintergrundbildes

In der set_section_heights () Funktion. Als erstes müssen wir herausfinden, wie hoch unser Hintergrundbild derzeit ist, und es als Variable speichern. Fügen Sie dazu diesen Code hinzu:

var doc_height = $ (". background"). height ();

Mit dem ersten Teil des Codes, $ (". Hintergrund"), jQuery findet das Element mit dem Klassennamen Hintergrund. Der angehängte .Höhe() Die Funktion erhält dann die Pixelhöhe dieses Elements als Ganzzahl. Dies zeigt uns, wie hoch unser Image „background.svg“ ist und speichert diese Zahl in der Variablen doc_height.

Definierte Abschnittshöhe festlegen

Jetzt richten wir ein Objekt ein, in dem wir definieren können:

  1. Der Klassenname jedes Elements, für das wir eine Höhe festlegen möchten.
  2. Wie hoch sollte dieses Element als Bruchteil der Hintergrundhöhe sein?. 

Wir durchlaufen dieses Objekt und verwenden die darin enthaltenen Werte, um die Größe der Abschnitte in unserem Vordergrund zu ändern.

Beginnen wir mit einem einzigen Eintrag im Objekt:

var section_heights = "ufo_section": 0,25

Hier haben wir den Index (den Wert links) auf gesetzt ufo_section um den Klassennamen unseres ersten Abschnitts zu finden.

Dann haben wir den Wert auf gesetzt 0,25 Das ist eine andere Möglichkeit, 25% auszudrücken. In Kürze werden wir diesen Wert mit der im Feld gespeicherten Zahl multiplizieren doc_height die Höhe des Hintergrundbildes. Damit sagen wir, wir wollen das ufo_section Panel soll 25% der aktuellen Höhe von "background.svg" sein.

Zum Beispiel, wenn die Höhe von "background.svg" war 1000px die höhe der ufo_section würde als herauskommen 250px:

 1000 * 0,25 = 250

Nachdem wir nun durchgesehen haben, wie dieses Objekt funktionieren wird, fügen wir einige Einträge für die anderen Elemente hinzu, für die wir Höhen festlegen möchten. Aktualisieren Sie Ihr Objekt wie folgt:

var section_heights = "ufo_section": 0,25, "spacer_one": 0,03, "comet_section": 0,36, "spacer_two": 0,06, "landing_section": 0,298

Hinweis: Ich habe diese Werte auf Basis von Versuch und Irrtum ausgewählt. Fühlen Sie sich also nach Beendigung dieses Tutorials mit den Zahlen herum, um die Auswirkungen zu sehen.

Iteriere das section_heights Objekt

Wenn unser Objekt vollständig ist, können wir es durchlaufen und die Größe der Panels ändern.

Zuerst brauchen wir eine $ .each () Funktion zum Durchlaufen der section_heights object und extrahieren Sie den Index und den Wert (jeweils den Namen und die Höhe der Klasse) aus jedem darin enthaltenen Eintrag.

Fügen Sie diesen Code nach Ihrem ein section_heights Objekt:

$ .each (section_heights, function (index, value) console.log ("Index:" + index, "| Value:" + value););

Damit Sie sehen können, wie die obige Iterationsfunktion den ausgibt Index und Wert Variablen verwenden wir console.log () für jeden Eintrag in der Konsole eine kleine Nachricht an die Konsole zu schreiben section_heights Objekt.

Laden Sie Ihre Site neu, öffnen Sie die Chrome Web Developer Tools (oder eine entsprechende Version in Ihrem bevorzugten Browser) und sehen Sie sich die Konsole an. Sie sollten das sehen:

Links von jeder Nachricht nach Index: du kannst das ... sehen Index für jeden Eintrag, d. h. die Klassennamen der Elemente, deren Größe geändert werden soll.

Rechts von jeder Nachricht nach Wert: du kannst das ... sehen Wert für jeden Eintrag, d. h. der Bruchteil der Gesamthöhe, die jedes Paneel haben sollte.

Schnitthöhen berechnen und einstellen

Anstatt diese Daten nur auf der Konsole zu protokollieren, verwenden wir sie, um die Größe unserer Vordergrundabschnitte festzulegen. Löschen Sie die console.log () zeile und ersetze es mit diesem:

$ ("." + index) .height (Math.floor (Wert * doc_height));

Brechen wir auf, was diese Linie macht.

Zuerst haben wir $ ("." + Index). Wir verwenden dies, um das Element zu finden, dessen Größe geändert werden soll. Zum Beispiel beim ersten Eintrag in unserem Objekt die Index ist auf ufo_section gesetzt. In diesem Fall wird der erste Teil unseres Codes ausgewertet $. (".ufo_section"). Mit diesem Code wird jQuery aufgefordert, die Seite mit der Klasse nach dem Element zu durchsuchen ufo_section.

Als nächstes fügen wir hinzu .Höhe (…). Mit diesem Code legt jQuery die Höhe des gefundenen Elements fest und ändert es in den Wert, der zwischen den Klammern übergeben wird.

Zwischen den Klammern sehen Sie value * doc_height. Hier führen wir die zuvor erwähnte Multiplikation durch, um die beabsichtigte Plattenhöhe zu berechnen. Zum Beispiel hat der erste Eintrag unseres Objekts den Wert 0,25. Diese Nummer wird mit der im Feld gespeicherten Zahl multipliziert doc_height Variable.

Um die Multiplikation dieser beiden Variablen werden Sie sehen Math.floor (). Dies rundet das Ergebnis unserer Multiplikation auf die nächste ganze Zahl. 

Also alles zusammen, wenn der Wert von doc_height ist 5197, Der erste Eintrag in unserem Objekt würde das mit multiplizieren 0,25 gib uns ein Ergebnis von 1299.25

Math.floor () rundet diesen Betrag auf 1299. Dies bedeutet, dass unser Code jetzt ausgewertet wird: $. (".ufo_section") .height (1299);

Mit dieser Zeile findet jQuery das Element mit der Klasse ufo_section und stellen Sie die Höhe auf 1299px.

Ihr abgeschlossenes HTML & JavaScript

Das bringt Ihre HTML und JavaScript zusammen. Ihre ausgefüllte "index.html" -Datei sollte nun folgenden Code enthalten:

    Alien Lander scrollen      

Laden Sie Ihre Website jetzt neu, um den Code in Aktion zu sehen. Wenn Sie Ihren HTML-Code überprüfen, sollten die neu berechneten Größen inline angezeigt werden:

Ändern Sie die Größe Ihres Browserfensters. Sie sollten diese Werte neu berechnen und aktualisieren, z.

Und du bist fertig!

Schauen Sie sich das Endergebnis an! Wenn Sie nun ganz oben auf der Seite beginnen und einen Bildlauf starten, sehen Sie, dass das UFO absteigt. Wenn es die Atmosphäre erreicht, verschwindet es ein wenig und ein "außerirdischer Komet" tritt an seine Stelle und setzt den Abstieg fort. Oben auf den Bäumen verschwindet es wieder und ein "kleiner grüner Mann" vollendet die Reise zum Boden.

Wie ich bereits erwähnt habe, ist es eine großartige Idee, sich mit den Werten aus der section_heights Objekt, so dass Sie sehen können, wie sie den Fluss des Landers durch seine verschiedenen Stufen beeinflussen.

Ich hoffe, Ihnen hat dieses Tutorial gefallen und Sie haben ein paar neue Ideen für coole Dinge bekommen, die Sie mit SVG-Bildern und festen Hintergründen machen können.

Nochmals vielen Dank an Yulia für die ursprüngliche Vektorillustration, danke für das Lesen und wir sehen uns bald wieder!