Seitenübergänge für Alle

Avatar of Georgy Marchuk
Georgy Marchuk am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Wie Sarah in ihrem vorherigen Beitrag über Seitenübergänge mit Vue.js erwähnte, gibt es reichlich Motivation für Designer und Entwickler, Seitenübergänge zu erstellen. Betrachten wir mobile Anwendungen. Während mobile Anwendungen sich weiterentwickeln, wird immer mehr Aufmerksamkeit auf die Animationserfahrung gelegt, während das Web weitgehend gleich bleibt. Warum ist das so?

Vielleicht liegt es daran, dass native App-Entwickler mehr Zeit mit diesen Animationen verbringen. Vielleicht liegt es daran, dass Benutzer sagen, dass sie das wollen. Vielleicht liegt es daran, dass sie mehr über die Umgebung wissen, in der die App laufen wird. All das hilft, die Erfahrung im Laufe der Zeit zu verbessern. Insgesamt scheint es, dass mobile App-Entwickler irgendwie mehr über die Benutzererfahrung wissen oder sich mehr darum kümmern.

Wenn wir uns ansehen, wie mobile Apps heute gestaltet werden, gibt es sehr oft eine Art animierten Übergang zwischen Zuständen. Selbst fertige native Komponenten haben eine Art einfache Animation zwischen Zuständen. Entwickler und Designer haben erkannt, dass diese kleine Animation dem Benutzer hilft, zu verstehen, was in der App passiert. Sie erleichtert die Navigation durch die App und sagt dem Benutzer, wohin er in der App gelangt.

Wenn Sie beispielsweise zu einer Unterkategorie navigieren, gleitet diese normalerweise von der rechten Seite des Bildschirms herein, und wir alle wissen irgendwie, was das bedeutet.

Animation ist wichtig. Sie kann verwendet werden, um die Benutzererfahrung zu verbessern.

Wenn Sie eine Website entwickeln, ist es einfach, Stunden damit zu verbringen, sicherzustellen, dass der Benutzer die ganze Geschichte durch erstklassige Übergänge sieht, wie die Bewegung zwischen Galeriebildern oder schicke Hover-Effekte ... aber sobald ein Benutzer einen Link anklickt, zerfällt diese gesamte Erfahrung und Sie beginnen von vorne. Das liegt daran, dass die Seite neu geladen wird und wir keine einfache/offensichtliche/native Möglichkeit haben, Animationen/Übergänge in dieser Situation zu handhaben.

Im Web konzentriert sich die meiste Anstrengung zur Verbesserung der Erfahrung auf Struktur, visuelles Design oder sogar die Leistung der Website. Es gibt ein paar Elemente, die Sie hier und da herumschieben können, aber das war's. Ein langweiliges Überbleibsel aus der Zeit, als das Web einfach dazu diente, durch eine Reihe von Textseiten zu navigieren, die später mit etwas gleitendem Text aufgewertet wurden.

Ja, das haben wir tatsächlich früher gemacht.

Es gibt einige sehr schicke Websites, die voller Animationen oder unglaublicher WebGL-Hieroglyphen im Hintergrund sind. Leider sind sie oft schwer zu navigieren und Ihr Laptop-Akku ist in etwa 15 Minuten leer. Aber sie sind sicherlich schön anzusehen. Diese Websites sind voller Animationen, aber die meiste davon wird verwendet, um Sie zu beeindrucken, und nicht, um Ihnen die Navigation zu erleichtern, die Erfahrung schneller zu machen oder Ihnen das Browsen der Website zu erleichtern.

Die Quelle des Problems

All dies wirft eine große Frage auf. Wir haben die gesamte Technologie, um diese Seitenübergangsfunktionen im Web zu nutzen. Warum tun wir es nicht? Liegt es daran, dass wir es nicht wollen? Liegt es daran, dass wir nicht denken, dass das Teil unserer Arbeit ist? Ist es so schwer, dass wir für Projekte doppelt so viel verlangen müssten und Kunden es nicht kaufen?

Werfen wir einen Blick auf einen anderen möglichen Grund. Oft wählt ein Unternehmen Technologien, die für alle seine Projekte üblich sind. Sie als Front-End-Entwickler haben nicht viel Kontrolle darüber, was auf dem Server implementiert wird, also können Sie vielleicht nicht auf einige serverseitige Rendering Ihres JSX zählen.

Vielleicht müssen Sie sich für etwas Stabiles und Allgemein einsetzbares für jede Art von Lösung entscheiden (was normalerweise bedeutet, je weniger Codebasis, desto flexibler), sodass Sie gezwungen sind, ein Framework in Ihrem Entwicklungsstack zu vermeiden. Das ist leider sinnvoll. Sie möchten kein Kontaktformular in 10 verschiedenen Frameworks implementieren, nur weil Sie entschieden haben, dass ein bestimmtes Framework eine gute Grundlage für dieses spezielle Projekt ist. Und fangen wir gar nicht erst mit der Sicherheit an, die im Laufe der Jahre verbessert wurde. Sie können sie nicht einfach wegwerfen, nur weil Sie möchten, dass Ihr Benutzer beim Surfen auf Ihrer Website etwas mehr Spaß hat.

Es gibt einen weiteren möglichen Grund. Vielleicht möchten Sie auf WordPress aufbauen, weil Sie all die Open-Source-Goodies nutzen möchten, die die Leute über die Jahre für Sie vorbereitet haben. Würden Sie all diese „kostenlosen“ Funktionen gegen eine bessere Erfahrung eintauschen? Wahrscheinlich nicht…

Das Ziel

Abgesehen von drastischen und unrealistischen Änderungen wie dem Verzicht auf alle Bilder und Videos, ist unsere Website-Ladezeit vom Server eben, wie sie ist. Wir haben eine serverseitig gerenderte Seite und abgesehen von einem schnelleren Server oder besserem Caching gibt es nicht viel zu tun, um dies zu verbessern.

Der Weg zur Verbesserung der Ladezeit ist also, ein wenig zu schummeln! Schummeln, indem man den Benutzer denken lässt, es dauere weniger Zeit, weil er durch das, was auf dem Bildschirm passiert, abgelenkt ist. Schummeln, indem man den Inhalt im Voraus lädt und den Übergang animiert.

Lassen Sie uns einige Effekte einführen, die für den Übergang verwendet werden könnten. Selbst ein einfaches Ein-/Ausblenden kann Ihnen ein ganz anderes Gefühl vermitteln, besonders mit einem Element, das das Laden anzeigt. Sehen wir uns einige Beispiele an.

Hinweis: Alle folgenden Beispiele sind Websites, die auf PHP basieren und praktisch ohne JavaScript wie jede andere Website funktionieren.

Quelle: rsts.cz/25let (öffentliche Produktionsseite)

Ein einfaches Aus-/Einblenden verbessert nahtlos die Benutzererfahrung vor dem Klick auf den Link und ist nicht so störend wie ein normaler Browser-Neuladevorgang. Die Ladeanzeige an einem Menüsymbol stellt sicher, dass der Benutzer nicht in Panik gerät, falls die Seite etwas länger zum Laden braucht.

Einige interessante Animationen können durch die Animation verschiedener Elemente auf unterschiedliche Weise erzielt werden, was auch mit dem Ausblenden kombiniert werden kann.

Quelle: mcepharma.com (öffentliche Produktionsseite)

Oder wie wäre es, die Seite mit einem anderen Element abzudecken?

Quelle: delejcotebavi.decathlon.cz (öffentliche Produktionsseite)

Diese wenigen Arbeitsstunden verleihen der Website ein völlig neues Gefühl, indem sie Ihre statische Seite in eine animierte verwandeln. Und das ohne zusätzliche Vorbereitung.

Wenn Sie sich jedoch in der Entwurfsphase Ihrer Absichten bewusst sind, können Sie das Design an Ihre Bedürfnisse anpassen. Gängige Elemente können im Voraus vorbereitet werden.

Quelle: vyrostlijsme.cz/zaciname (internes Unternehmenssystem)

Das Hauptnavigationsmenü in Form von Blasen spielt mit dem Benutzer, während der Inhalt der nächsten Seite geladen wird. Die Auswirkung ist, dass der Benutzer nicht gelangweilt ist und weiß, dass etwas passiert. Da die Animation beim Klicken auf den Link beginnt, merkt der Benutzer nicht einmal, dass er auf etwas gewartet hat.

Lösung

Wir haben geklärt, was wir tatsächlich tun wollen und warum wir es tun wollen… sehen wir uns an, wie wir das erreichen können.

Während im Backend nicht viel getan werden kann, gibt es auf der Browserseite eine ganze Menge, was Sie tun können. Ein gutes Beispiel ist Turbolinks, entwickelt von den Leuten von Basecamp, das Ihre Website aufwertet und ihr ein App-ähnlicheres Gefühl verleiht, indem es das Laden von Inhalten mit JavaScript ermöglicht. Es vermeidet einfach diesen unschönen Sprung beim Neuladen der Browserseite. Turbolinks kümmert sich um den Browserverlauf, das Laden und all die anderen Dinge, die normalerweise im Hintergrund des Browsers passieren würden. Der entscheidende Punkt hier ist die Kontrolle über das Laden und Ersetzen von Inhalten, denn solange der Browser nicht neu lädt, liegt alles, was auf dem Bildschirm passiert, in unserer Kontrolle.

Denken wir über einige Konzepte nach, die wir zur Verbesserung unserer Erfahrung nutzen können. Die Ladezeit ist unser größter Feind, also wie können wir sie im Browser verbessern?

Vorspulen

In den meisten Fällen muss die Anfrage zum Laden der nächsten Seite nicht erst dann beginnen, wenn der Benutzer auf den Link klickt. Es gibt ein weiteres Ereignis, das die Absicht des Benutzers anzeigen kann, die Seite zu besuchen, und das ist ein Hover über dem Link. Es gibt immer ein paar hundert Millisekunden zwischen Hover und Klick auf den Link, warum diese Zeit nicht zu unserem Vorteil nutzen? Verdammt, wenn die Mehrheit Ihrer Benutzer auf der nächsten Seite landet, die Ihnen bekannt ist und für die Sie Statistiken haben, warum dann nicht im Grunde preloaden, sobald die anfängliche Rendereung abgeschlossen ist, während der Benutzer versucht, sich auf der aktuellen Seite zurechtzufinden?

Das folgende Diagramm veranschaulicht, wie viele Dinge parallel passieren und uns einige dieser kostbaren Zeit sparen können, anstatt sie nacheinander zu erledigen. Ein sehr häufiger Fehler in kundenspezifischen Lösungen für Seitenübergänge, die Leute für sich selbst erstellen, ist der Beginn der Anfrage, der normalerweise ausgelöst wird, nachdem die Seite entladen/ausgeblendet wurde.

Möglicher Ablauf eines Übergangs

Caching

Während dies für einige dynamische Websites ein Problem sein kann, sind statische Websites perfekte Kandidaten für das Caching. Warum eine Seite zweimal laden, wenn Sie die Kontrolle über das Laden und Ersetzen des Inhalts haben? Sie können die Inhalte speichern und verwenden, falls der Benutzer dieselbe Seite besucht oder mit der Zurück-Schaltfläche des Browsers dorthin zurückkehrt.

Oder Sie können den Cache verwenden, um Seiten beim Hovern vorzuladen und den Cache regelmäßig zu leeren (vielleicht nach jedem Seitenbesuch), um bei dynamischen Websites immer die neueste Version der Seite zu haben und gleichzeitig diese Preload-Funktion zu aktivieren.

Interessanterweise „investieren“ Progressive Web Apps auch in diesen Bereich, obwohl der Ansatz etwas anders ist.

Animation

All diese Konzepte sind großartig, aber wir müssen immer noch Animationen ins Spiel bringen.

Die Kontrolle über das Laden und Ersetzen der Seite kann von uns übernommen werden, sodass wir jederzeit mit den Inhalten der Seite spielen können. Es ist beispielsweise einfach genug, der Seite eine Klasse hinzuzufügen, während sie geladen wird. Dies gibt uns die Möglichkeit, einen anderen Zustand für die Seite zu definieren oder sie mit anderen Worten auszublenden/entladen. Wenn die Animation abgeschlossen ist und die Seite geladen ist, können wir den Inhalt ersetzen und die Zustands-Klasse entfernen, damit die Seite wieder herein animiert.

Eine andere Möglichkeit besteht darin, Ihre Seite mit JavaScript „aus“ zu animieren, den Inhalt zu ersetzen und sie wieder „ein“ zu animieren.

Es gibt viele Möglichkeiten, dies anzugehen, aber in jedem Fall ist die Schlüsselfunktion hier, den Browser nicht neu laden zu lassen.

Bereit zum Start

Das sind drei Hauptkonzepte, die einen großen Unterschied machen werden. Der Punkt ist, dass es mit etwas zusätzlichem Aufwand nicht so schwer ist, dies selbst zu tun, und ich ermutige Sie, dies zu tun.

Es wird eine holprige Straße mit vielen möglichen Kopfschmerzen sein, da es nicht immer einfach ist, die native Funktionalität des Browsers nicht zu beeinträchtigen.

Wenn Sie jedoch eher ein Load-and-Go-Typ sind, habe ich ein kleines Paket namens swup zusammengestellt, das all die Dinge regelt, die Turbolinks tut, plus alle drei Konzepte, die wir hier behandelt haben. Hier ist eine kleine Demo.

Was sind die Vorteile von swup?

  • Es funktioniert ausschließlich im Frontend, sodass keine Servereinstellung erforderlich ist. Obwohl Sie leicht eine Übertragung nur der erforderlichen Daten basierend auf X-Requested-With im Anfrageheader implementieren können (eine kleine Anpassung von swup ist basierend auf Ihrer spezifischen Lösung erforderlich).
  • Verwendet die Browser-History-API, um die korrekte Funktionalität Ihrer Website sicherzustellen, wie sie auch ohne swup funktionieren würde (Vor-/Zurück-Schaltflächen und die richtige Route in der URL-Leiste).
  • Es muss nicht Teil des anfänglichen Lade-Batches sein und kann nach dem anfänglichen Rendern geladen und aktiviert werden.
  • Kümmert sich um das Timing, d. h. es erkennt automatisch das Ende Ihrer in CSS definierten Übergänge und kümmert sich in der Zwischenzeit um das Laden der nächsten Seite. Der gesamte Prozess basiert auf Promises, sodass keine einzige Millisekunde verschwendet wird.
  • Wenn in den Optionen aktiviert, kann swup eine Seite vorladen, wenn ein Link gehovert wird oder sobald er im geladenen Inhalt gefunden wird (mit dem Attribut data-swup-preload).
  • Wenn in den Optionen aktiviert, speichert swup auch die Inhalte der Seiten im Cache und lädt dieselbe Seite nicht zweimal.
  • Swup sendet eine ganze Reihe von Ereignissen, die Sie in Ihrem Code verwenden können, um Ihr JavaScript, Analysen usw. zu aktivieren.
  • Sie können beliebig viele Elemente zum Ersetzen definieren, solange sie für alle Seiten gemeinsam sind. Dies ermöglicht es, gemeinsame Elemente auf der Seite zu animieren und gleichzeitig deren Teile zu ersetzen. Das Blasennavigationsmenü in unserem früheren Beispiel verwendet diese Funktion, bei der die Häkchen auf den Blasen von der geladenen Seite stammen, aber der Rest der Blase auf der Seite bleibt, sodass er animiert werden kann.
  • Bietet Ihnen die Möglichkeit, für Übergänge zwischen verschiedenen Seiten unterschiedliche Animationen zu verwenden.

Für diejenigen unter Ihnen, die ihre Animationen lieber mit JavaScript erstellen, gibt es auch eine Version davon namens swupjs. Während es schwieriger sein kann, Animationen in JavaScript zu implementieren, gibt es Ihnen definitiv mehr Kontrolle.

Fazit

Die Animation und nahtlose Erfahrung muss nicht streng auf native Anwendungen oder die neuesten Technologien beschränkt sein. Mit wenig Aufwand, Zeit und etwas Code kann selbst Ihre WordPress-Website wie eine native wirken. Und während wir das Web so lieben, wie es ist, denke ich, wir können immer versuchen, es ein bisschen besser zu machen.