Vor einiger Zeit hat mir ein Leser namens James Dimick jQuery-Code geschickt, an dem er arbeitete, um eine „Loading Dots“-Funktion zu erstellen. Sie kennen das klassische Designmuster, bei dem der Bildschirm (oder ein Bereich) „Loading…“ mit wachsenden Punkten anzeigt.
Lädt (Loading)
Loading.
Loading..
Loading…
Loading….
Ich habe mir seinen Code angesehen und gesagt: „Oh ja, das kann ich sicher effizienter machen.“ Dann habe ich das, was er hatte, genommen und es doppelt so lang gemacht =). Aber fairerweise habe ich es in ein Plugin verwandelt und es flexibler und vielseitiger gemacht.
Was es tut
Sie rufen es für ein beliebiges Element auf, so:
$("#randomArea").Loadingdotdotdot({
"speed": 400,
"maxDots": 4,
"word": "Loading"
});
Es ersetzt den Inhalt dieses Elements vollständig durch den Text „Loading“ (mit den animierten Punkten). Die Geschwindigkeit gibt an, wie schnell der nächste Punkt platziert wird. maxDots gibt an, wie viele Punkte es maximal werden, bevor es von vorne beginnt.
Das Plugin stellt sicher, dass „Loading…“ horizontal und vertikal exakt in der Mitte des Elements zentriert ist, in dem es aufgerufen wird.
Wofür ist es gut?
Am wahrscheinlichsten würden Sie es in einem Element kurz vor einem AJAX-Aufruf verwenden. Dies gibt den Benutzern einen Hinweis darauf, dass mit diesem Bereich etwas passiert. Vermutlich wird nach Erfolg (oder Fehler) dieses AJAX-Aufrufs der Inhalt des Bereichs erneut ersetzt (wodurch das „Loading…“ ersetzt wird).
Demo und Download
Sehen Sie sich die Demo-Seite an, bevor Sie herunterladen/verwenden. Dort gibt es eine „Cleanup“-Funktion, die in jeder Live-Umgebung verwendet werden sollte. Es gibt eine `setInterval()`-Funktion, die im Plugin aufgerufen wird, und nach einem erfolgreichen AJAX-Aufruf sollte dieses Intervall gestoppt werden, um zu verhindern, dass der Browser es auf einem Element ausführt, das nicht mehr existiert.
Demo ansehen Dateien herunterladen
Lehrreiche Lektion
Ich habe dieses Plugin mit der Methode erstellt, die ich irgendwie für die Doug Neiner Methode halte. Daher sind alle Funktionen, Variablen und Parameter innerhalb des „Kerns“ des Plugins enthalten. Eine weitere Sache, die ich von Doug gelernt habe, ist, wie ein Plugin verschiedene Dinge tun kann, je nachdem, welche Parameter man übergibt. Sie haben oben die Standardverwendung gesehen, bei der Sie ihm Geschwindigkeit und maxDots als Objekt übergeben. Die Bereinigungsfunktion, die es tut, wird jedoch durch Übergabe eines Strings an das Plugin durchgeführt, wie z.
$("#randomArea").Loadingdotdotdot("Stop");
Dies geschieht durch Testen destypeofParameters, bevor etwas unternommen wird.
$.fn.Loadingdotdotdot = function(options) {
if (typeof(options) == "string") {
// do something
} else {
// do a different (default) thing
}
};
Verwendung von CSS3-Animationen
James Dimick experimentierte auch mit CSS3-Animationen und entwickelte einige alternative Techniken für diese Ladeanzeige mit Punkten. Eine davon besteht darin, die Punkte in Spans zu verpacken und dann Keyframe-Animationen zu verwenden, um ihre Deckkraft unendlich, aber versetzt voneinander zu wiederholen.
<p id="loading">Loading<span>.</span><span>.</span><span>.</span></p>
@-webkit-keyframes opacity {
0% { opacity: 1; }
100% { opacity: 0; }
}
@-moz-keyframes opacity {
0% { opacity: 1; }
100% { opacity: 0; }
}
#loading {
text-align: center;
margin: 100px 0 0 0;
}
#loading span {
-webkit-animation-name: opacity;
-webkit-animation-duration: 1s;
-webkit-animation-iteration-count: infinite;
-moz-animation-name: opacity;
-moz-animation-duration: 1s;
-moz-animation-iteration-count: infinite;
}
#loading span:nth-child(2) {
-webkit-animation-delay: 100ms;
-moz-animation-delay: 100ms;
}
#loading span:nth-child(3) {
-webkit-animation-delay: 300ms;
-moz-animation-delay: 300ms;
}
Beachten Sie die Vendor-Präfixe und die aktuelle Browserunterstützung.
Seine nächste Idee war die Verwendung eines Kreis aus Punkten, der sich dreht, ähnlich wie diese lustigen kleinen AJAX-Lade-Grafiken, nur eben mit CSS3-Animationen.
Aktualisierungen
1/25/2012:
Plugin aktualisiert, um den „word“-Parameter aufzunehmen, damit Sie den Text einfach ändern können. Danke Harris Novick.
Hier ist eine weitere CSS-Animationstechnik, bei der die Punktgruppe zusammen liegt (anstatt in separaten Spans) und durch Animation der Breite ihres übergeordneten Elements mit überlaufendem Inhalt ausgeblendet wird.
Diese Spinner sind ebenfalls bemerkenswert, da sie zur gleichen grundlegenden Designmustergruppe gehören.
Gut, ich speichere das, da ich immer Bilder verwendet habe :)
Gute Informationen… Ich werde das mal ausprobieren.
Danke fürs Teilen, aber ich finde es nicht notwendig für eine Seite und es würde mehr Ladezeit für das Plugin beanspruchen, als das Bild wahrscheinlich von selbst zu laden.
*Puuh*
Mit dem Offensichtlichen im Hinterkopf möchte ich hinzufügen, dass Plugins und andere Effekte wie dieser oft Toröffner für praktischere Anwendungen sind und denen, die lernen wollen, Türen öffnen.
Nochmals vielen Dank.
Ich habe ein sehr ähnliches MooTools-Plugin namens Dotter
http://davidwalsh.name/mootools-dotter
Wirklich schöne Implementierung, Chris. Ich denke, wir haben einen Wettkampf zwischen „Dotter“ und jQuery Dots.
Dotter FTW
Chris,
Danke für diesen Verweis auf das Doug Neiner Tool. Ich beginne endlich, die jQuery Plugin-Entwicklung zu verstehen… Es ist höchste Zeit.
Ich bin definitiv an der CSS3-Implementierung interessiert. Ich weigere mich praktisch, .gif-Animationen zu verwenden, daher ist es großartig, einen Weg gefunden zu haben, dies mit CSS als progressive Enhancement zu tun. Dann werden wir einfach das normale dotdotdot als Fallback verwenden.
-Jacob
Ich finde es sehr intuitiv und es passt besser in Designs. Danke, ich werde es im Hinterkopf behalten.
Hallo, sehr schöner Share, Chris… Ich habe gerade deinen Blog gefunden und bin neu bei Ajax. Alle deine Beiträge waren bisher sehr hilfreich.
Mach weiter so und danke, dass du all diese Dinge teilst :)
Der Webkit-Animationsweg ist so cool 8)
Man könnte eine Textoption hinzufügen, die standardmäßig auf „Loading“ gesetzt ist. Damit könnten Benutzer einen personalisierten Text verwenden und auch in anderen Sprachen, z. B. wäre es auf pt_BR „Carregando“.
Schöne Plugin-Idee, herzlichen Glückwunsch.
Liebe die Art, wie CSS3-Animationen funktionieren :) Großartiges Plugin auch :)
Hallo,
Es ist eine schöne Alternative zu Bildern. Können wir es nicht einfach nur zunehmende Punkte machen? Nicht eine feste Anzahl. Funktioniert das? Können wir die Anzahl der Punkte anzeigen, damit wir sehen können, wie lange es tatsächlich dauert. Es könnte für den Besucher frustrierend sein zu sehen, dass der Inhalt zu lange dauert.
Können wir??
Gibt es -moz- und -o- (und Core CSS3)-Optionen für die Elemente, die in der Webkit-Version verwendet werden? Es wäre interessant, eine ähnliche Implementierung mit Fallback und/oder browserübergreifender Kompatibilität zu sehen.
Ziemlich cooler Effekt. Aber unterstützen alte Browser das?
NICE,
habe schon eine Weile nach so etwas gesucht.
Nebenbemerkung: Ich mag es, kooperative Artikel wie diesen zu sehen, macht weiter so.
Bitte...
Man möchte dem Benutzer wahrscheinlich nicht nur den Fortschritt, sondern auch das Ausmaß des Fortschritts anzeigen. Dazu kann man die Ziellinie auf viele verschiedene Arten anzeigen.
Persönlich bevorzuge ich eine Spin-GIF oder eine Prozentleiste, die nicht übersetzt werden müssen.
Erinnert mich so an Commodore 64 Zeiten.
Mach's gut.
Chris
schönes Werkzeug, ich habe wirklich nach genau dem gesucht…. danke fürs Teilen
Bevorzuge Animationen mit Bildern oder das Wechseln von Bildern, um sie animiert erscheinen zu lassen, aber danke dafür, es wird reichen, bis man passende Bilder erstellen kann.
Gute Verwendung von jQuery, aber ich bezweifle, dass ich viele Verwendungsmöglichkeiten dafür finden werde. Das einzige Mal, dass ich einen Ladebalken habe, ist bei Flash-Dateien über 150 KB, aber mein ganzer jQuery usw. scheint ziemlich sofort zu laden, und ich bin sicher, dass es nicht mehr viele Dial-up-Nutzer gibt.
Würde das Hinzufügen eines zusätzlichen Plugins zu etwas nicht die Ladezeit erhöhen?
Ich weiß, dass man das mit Schriftarten und Farben usw. stylen kann, aber ich denke, grafische Elemente lassen Ladebalken usw. viel besser aussehen. Könnte dieses Plugin zusammen mit vielleicht einigen grafischen Elementen verwendet werden (d. h. es lädt 4x Bilder eines schicken Punkts oder so etwas)? Ich denke, das würde mehr Leute dazu anregen, es zu verwenden.
Ein sehr gut geschriebener Artikel……
Es wäre schön, wenn die Punkte eher ein- als ausgeblendet würden.
Ich hätte es wahrscheinlich einfach zwischen Punkten und Leerzeichen wechseln lassen (String-Manipulation) statt mit CSS3-Opazitätsänderungen herumzuspielen, aber vielleicht bin ich einfach altmodisch.
Es ist auf jeden Fall eine nette Idee, auf ein Ladebild zu verzichten.
Ich würde gerne ein grundlegendes Lade-Plugin für Seitenelemente sehen, sobald sie zum ersten Mal geladen werden, während sich die Seite selbst öffnet.
Sehr nützliches Werkzeug! Danke, Mann!
Toller Beitrag, dieser Code wird sicherlich nützlich sein!
Danke.