suchen
HeimWeb-Frontendjs-TutorialEinfacher und praktischer Fortschrittsbalken beim Laden der Komponente Loader.js

Einfacher und praktischer Fortschrittsbalken beim Laden der Komponente Loader.js

Dieser Artikel bietet eine einfache Methode zum Implementieren des Fortschrittsbalken-Ladeeffekts eines Prozesses, sodass er verwendet werden kann, um den Abschlussfortschritt zeitaufwändiger Aufgaben auf der Seite besser zu melden. Um diese Funktion zu implementieren, müssen Sie zunächst überlegen, wie Sie einen statischen Fortschrittsbalkeneffekt implementieren, der dem folgenden ähnelt:

Einfacher und praktischer Fortschrittsbalken beim Laden der Komponente Loader.js

Dies ist relativ einfach, nur zwei Divs, offizieller Bootstrap stellt Fortschrittsbalkenkomponenten mit mehreren Themen bereit. Wenn Sie es selbst verwenden möchten, beziehen Sie sich einfach auf den Code anderer Leute und schreiben Sie ihn in Ihrem eigenen Stil. Es ist eigentlich sehr einfach zu verstehen:

.progress {
    height: 20px;
    background-color: #f5f5f5;
    border-radius: 4px;
    box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);}.progress-bar {
    float: left;
    width: 0;
    height: 100%;
    font-size: 12px;
    line-height: 20px;
    color: #fff;
    text-align: center;
    background-color: #337ab7;
    box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
    position: relative;
    border-radius: 4px;}

Der zweite Schritt besteht darin, zu überlegen, wie der Fortschritt berechnet werden soll. Nehmen wir als Beispiel das Laden einer Ressource. Wenn es sich um einen Client handelt, haben wir normalerweise die Berechtigung, die tatsächliche Größe der Ressource zu lesen. Daher müssen wir bei der Berechnung des Ladefortschritts nur die geladene Datenmenge durch die Gesamtmenge dividieren ; Auf der Webseite haben wir jedoch nicht die Möglichkeit, die Größe der zu ladenden Ressourcen zu ermitteln, sodass wir nur eine weniger genaue Lösung verwenden können, indem wir die Anzahl der geladenen Ressourcen durch die Gesamtzahl dividieren von Ressourcen. Basierend auf der folgenden Berechnungsmethode müssen wir nur den Fortschritt der abgeschlossenen Aufgabe zu dem Zeitpunkt berechnen, zu dem jede zeitaufwändige Aufgabe abgeschlossen ist, und dann die entsprechende Breite des Fortschrittsbalkens festlegen.

Im Folgenden verwende ich einen Timer, um 4 asynchrone Aufgaben zu simulieren, die gleichzeitig initiiert werden, deren Abschluss jedoch unterschiedliche Zeiten erfordern, um die Funktion dieses Schritts zu implementieren:

<!doctype html><html lang="en"><head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link href="loader.css" rel="stylesheet"></head><body><div id="loader" class="loader">
    <div class="progress">
        <div class="progress-bar progress-bar-striped">
            <div class="progress-value"></div>
        </div>
    </div></div></body><script src="jquery.js"></script><script>
    var $bar = $(&#39;#loader&#39;).find(&#39;.progress-bar&#39;);    var $value = $bar.find(&#39;.progress-value&#39;);    var Task = function (index, duration) {
        setTimeout(function () {
            var p = (index / 4 * 100).toFixed(0) + &#39;%&#39;;
            $bar.css(&#39;width&#39;,p);
            $value.text(p);
            console.log(&#39;第&#39; + index + &#39;个异步任务执行完毕&#39;);
        }, duration);
    };    //模拟四个同时发起的异步任务
    var task1 = new Task(1, 1000);    var task2 = new Task(2, 3000);    var task3 = new Task(3, 5000);    var task4 = new Task(4, 7000);</script></html>

Der tatsächliche Effekt ist wie folgt :

Einfacher und praktischer Fortschrittsbalken beim Laden der Komponente Loader.js

Wenn Sie diesen Schritt erreichen, haben Sie tatsächlich eine grundlegende Ladefunktion für den Fortschrittsbalken implementiert. Der obige Effekt scheint jedoch keine sehr gute Erfahrung zu sein. Es wäre schön, wenn die Fortschrittswerte dieses Fortschrittsbalkens kontinuierlich geändert werden könnten, so:

Einfacher und praktischer Fortschrittsbalken beim Laden der Komponente Loader.js

Um diesen Schritt zu erreichen, denken einige Leute möglicherweise darüber nach, einen Übergang mit einer Breite von 0,2 Sekunden für den Fortschrittsbalken festzulegen. Wenn sich dann die Breite des Fortschrittsbalkens ändert, können Sie natürlich die Auswirkung des Fortschrittsbalkens sehen sich ständig verändern. Bei dieser Methode gibt es zwei Probleme:

1 Die Zahl kann sich nicht kontinuierlich ändern, da die Zahl nicht durch Übergang von einem Wert auf einen anderen umgestellt werden kann.

2 Auf 100 % laden, denn wenn der Abschlussfortschritt zeitaufwändiger Aufgaben 100 % beträgt, gibt es neben der Einstellung der Breite des Fortschrittsbalkens auf 100 % normalerweise auch eine Logik zum Ausblenden oder Entfernen des Fortschrittsbalkens, und der Fortschrittsbalken verfügt über eine Übergang Der Übergang von der ursprünglichen Breite auf 100 % dauert eine gewisse Zeit, sodass Benutzer nicht 100 % sehen können.

Allerdings sind diese beiden keine großen Probleme. Auch der Fortschrittsbalken ohne Fortschrittszahlen kommt sehr häufig vor, wenn er weniger als 100 % anzeigt Der Effekt kann manchmal dazu führen, dass Benutzer die Illusion haben, dass es sehr schnell lädt. .

Wenn Sie mit den beiden oben genannten Problemen kämpfen möchten, wie implementieren Sie eine Funktion mit Zahlen und Fortschritten, die kontinuierliche Änderungen erfüllen können und erst dann in die Hauptszene gelangen, wenn der Fortschrittsbalken den Ladeeffekt zu 100 % anzeigt? ? Genau wie der folgende ähnliche Effekt:

Einfacher und praktischer Fortschrittsbalken beim Laden der Komponente Loader.js

Bei dieser Anforderung gibt es meines Erachtens zwei Punkte, die beachtet werden müssen:

Erstens, wann eine Aufgabe ist abgeschlossen Zu diesem Zeitpunkt sind die verbleibenden Aufgaben möglicherweise noch nicht abgeschlossen. Zu diesem Zeitpunkt wechselt der Fortschrittsbalken in den Wartezustand. Sie müssen warten, bis andere Aufgaben abgeschlossen sind und ein neuer Fortschritt vorliegt, bevor Sie den nächsten Ladeeffekt sehen können.

2 Es handelt sich um die Rückrufsteuerung, wenn der Fortschrittsbalken auf 100 % geladen ist. Wenn der Fortschrittsbalken der Aufgabe 100 % beträgt, dauert es möglicherweise einige Zeit, bis sich der Fortschrittsbalken ändert von seinem aktuellen Wert auf 100 %, also Es stellt sich heraus, dass einige hinzugefügte Logiken, wenn der Fortschritt der Aufgabenerfüllung 100 % beträgt, z. B. das Betreten der Hauptszene, in dem Moment verarbeitet werden müssen, in dem der Fortschrittsbalken auf 100 % geladen wird.

Basierend auf dem oben Gesagten ist meine Idee:

1. Teilen Sie die Änderungen im Fortschrittsbalken in mehrere Segmente auf, da jeder Abschluss einer zeitaufwändigen Aufgabe einem Fortschrittswert entspricht. und diese Werte sind größer als 0 und kleiner oder gleich 100. Am Beispiel von vier zeitaufwändigen Aufgaben wird der Fortschrittsbalken in drei Segmente unterteilt: 0-25, 25-50, 75-100

2. Abstrahieren Sie die Segmentierung von Schritt 1. Es wird eine Ladeaufgabe mit einem Fortschrittsbalken. Diese Aufgabe hat zwei grundlegende Attribute: Ladezeit und Änderungsintervall. Machen Sie aus dieser Aufgabe eine Animation. Stellen Sie bei jeder Ausführung der Animation einen Rückruf nach außen bereit und übergeben Sie den aktuellen Fortschrittswert, um die Breite des Fortschrittsbalkens festzulegen. Der aktuelle Fortschrittswert kann anhand der Ausführungszeit der Animation, der Ladezeit und dem Änderungsintervall berechnet werden. Das Änderungsintervall entspricht dem Prozentbereich in Schritt 1. Die Ladezeit kann berechnet werden, indem man den Intervallbereich * die Zeit ändert, die benötigt wird, damit der Fortschrittsbalken 1 % lädt. Mit anderen Worten: Die zum Laden von 1 % der Animation erforderliche Zeit sollte als Konstante betrachtet werden. Der Einfachheit halber wird die Zeit, die zum Laden der Animation von 0 auf 100 % benötigt wird, zur besseren Steuerung als Konstante verwendet.

3. Definieren Sie eine Warteschlange zum Speichern der abstrakten Ladeaufgaben in Schritt 2. Steuern Sie den Ausführungszeitpunkt der ersten Aufgabe in der Warteschlange; jedes Mal, wenn eine Aufgabe ausgeführt wird, wird die nächste automatisch ausgeführt.

4. Wenn der Aufgabenfortschritt 100 % beträgt und die letzte Aufgabe in der Warteschlange abgeschlossen ist, benachrichtigen Sie die Außenseite, um einen Rückruf durchzuführen.

Der tatsächliche Effekt dieser Demo ist genau der gleiche wie der des vorherigen GIFs.

Bisher haben wir eine Komponente, die den Ladeeffekt des Fortschrittsbalkens steuert, die ziemlich praktisch aussieht. Allerdings ist es nicht ohne Probleme. Das Problem besteht darin, dass die Zeit, die zum Laden des Fortschrittsbalkens benötigt wird, definitiv länger ist als die Zeit, die benötigt wird, bis der Fortschrittsbalken, den wir in Schritt 2 festgelegt haben, auf einmal von 0 auf 100 % geladen wird Zeit. Mit anderen Worten: Dieser Ansatz verzögert absichtlich den gesamten Prozess einer zeitaufwändigen Aufgabe. Daher kann die oben genannte Konstante im tatsächlichen Gebrauch nicht zu lange definiert werden.

Schließlich kann diese Komponente in Verbindung mit einer Komponente verwendet werden, die ich zuvor über das Vorladen von Bildern geschrieben habe, um einen perfekteren Bildvorladeeffekt zu erzielen. Wenn Sie interessiert sind, können Sie es ausprobieren.

Ich hoffe, dass der Inhalt dieses Artikels für die tatsächliche Arbeit aller hilfreich sein wird.

Das obige ist der detaillierte Inhalt vonEinfacher und praktischer Fortschrittsbalken beim Laden der Komponente Loader.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Dieser Artikel ist reproduziert unter:51dev. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
JavaScript und das Web: Kernfunktionalität und AnwendungsfälleJavaScript und das Web: Kernfunktionalität und AnwendungsfälleApr 18, 2025 am 12:19 AM

Zu den Hauptanwendungen von JavaScript in der Webentwicklung gehören die Interaktion der Clients, die Formüberprüfung und die asynchrone Kommunikation. 1) Dynamisches Inhaltsaktualisierung und Benutzerinteraktion durch DOM -Operationen; 2) Die Kundenüberprüfung erfolgt vor dem Einreichung von Daten, um die Benutzererfahrung zu verbessern. 3) Die Aktualisierung der Kommunikation mit dem Server wird durch AJAX -Technologie erreicht.

Verständnis der JavaScript -Engine: ImplementierungsdetailsVerständnis der JavaScript -Engine: ImplementierungsdetailsApr 17, 2025 am 12:05 AM

Es ist für Entwickler wichtig, zu verstehen, wie die JavaScript -Engine intern funktioniert, da sie effizientere Code schreibt und Leistungs Engpässe und Optimierungsstrategien verstehen kann. 1) Der Workflow der Engine umfasst drei Phasen: Parsen, Kompilieren und Ausführung; 2) Während des Ausführungsprozesses führt die Engine dynamische Optimierung durch, wie z. B. Inline -Cache und versteckte Klassen. 3) Zu Best Practices gehören die Vermeidung globaler Variablen, die Optimierung von Schleifen, die Verwendung von const und lass und die Vermeidung übermäßiger Verwendung von Schließungen.

Python vs. JavaScript: Die Lernkurve und BenutzerfreundlichkeitPython vs. JavaScript: Die Lernkurve und BenutzerfreundlichkeitApr 16, 2025 am 12:12 AM

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

Python gegen JavaScript: Community, Bibliotheken und RessourcenPython gegen JavaScript: Community, Bibliotheken und RessourcenApr 15, 2025 am 12:16 AM

Python und JavaScript haben ihre eigenen Vor- und Nachteile in Bezug auf Gemeinschaft, Bibliotheken und Ressourcen. 1) Die Python-Community ist freundlich und für Anfänger geeignet, aber die Front-End-Entwicklungsressourcen sind nicht so reich wie JavaScript. 2) Python ist leistungsstark in Bibliotheken für Datenwissenschaft und maschinelles Lernen, während JavaScript in Bibliotheken und Front-End-Entwicklungsbibliotheken und Frameworks besser ist. 3) Beide haben reichhaltige Lernressourcen, aber Python eignet sich zum Beginn der offiziellen Dokumente, während JavaScript mit Mdnwebdocs besser ist. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.

Von C/C nach JavaScript: Wie alles funktioniertVon C/C nach JavaScript: Wie alles funktioniertApr 14, 2025 am 12:05 AM

Die Verschiebung von C/C zu JavaScript erfordert die Anpassung an dynamische Typisierung, Müllsammlung und asynchrone Programmierung. 1) C/C ist eine statisch typisierte Sprache, die eine manuelle Speicherverwaltung erfordert, während JavaScript dynamisch eingegeben und die Müllsammlung automatisch verarbeitet wird. 2) C/C muss in den Maschinencode kompiliert werden, während JavaScript eine interpretierte Sprache ist. 3) JavaScript führt Konzepte wie Verschlüsse, Prototypketten und Versprechen ein, die die Flexibilität und asynchrone Programmierfunktionen verbessern.

JavaScript -Engines: Implementierungen vergleichenJavaScript -Engines: Implementierungen vergleichenApr 13, 2025 am 12:05 AM

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

Jenseits des Browsers: JavaScript in der realen WeltJenseits des Browsers: JavaScript in der realen WeltApr 12, 2025 am 12:06 AM

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Apr 11, 2025 am 08:23 AM

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool