Fortschrittsbalken mit CSS/JavaScript

FortschrittsbalkenFortschrittsbalken werden vor allem bei Webanwendungen gebraucht, die mit dem Benutzer interagieren, beispielsweise beim Hochladen von Dateien oder um den Fortschritt in einem Formular anzuzeigen. Aber auch bei anderen Webanwendungen können Fortschrittsbalken sinnvoll sein, beispielsweise um den aktuellen Stand eines noch nicht fertiggestellten Projektes anzuzeigen oder den noch verfügbaren Speicherplatz, o.Ä.

In dieser Anleitung erkläre ich wie man einfache Fortschrittsbalken mit CSS erstellen kann, und stelle 4 JavaScript-Skripte vor mit denen sich “bewegliche” Fortschrittsbalken erstellen lassen.

Einfache Fortschrittsbalken

Fortschrittsbalken mittels CSS zu erstellen ist nicht weiter schwer, man braucht im Grunde nur zwei Elemente, die übereinander gelegt werden.

Ohne Bilder

Einfacher Fortschrittsbalken ohne BilderMan erstellt ein Element, gibt ihm eine Hintergrundfarbe und weist ihm eine Breite/Höhe zu. In diesem Element erstellt man nun ein zweites Element, dem man ebenfalls eine Hintergrundfarbe (möglichst eine andere, als die vom ersten Element) und die gleiche Höhe wie dem ersten Element zu. Die Breite des zweiten Elements gibt dann an, welchen Wert der Fortschrittsbalken anzeigen soll.

<style type="text/css">
  div.fsb {
    border:1px solid #000;
    background-color:white;
    width:200px;
    height:28px;
    padding:1px;
  }
 
  div.fortschritt {
    background-color:#000;
    height:28px;
    width:50%; /* Fortschritt */
  }
</style>
<!-- [...] -->
<div class="fsb">
  <div class="fortschritt"></div>
</div>

In Aktion sieht das dann so aus: Demo.

Mit Bildern

Einfacher Fortschrittsbalken mit BildernMöchte man den Fortschrittsbalken etwas schöner gestalten, kann man natürlich auch Bilder verwenden, die Methode funktioniert eigentlich genau so. Der einzige Unterschied ist, das anstatt von Hintergrundfarben Bilder verwendet werden.

div.fsb {
    background:url('normal.png') no-repeat left center;
    width:300px;
    height:30px;
}
 
div.fortschritt {
    background:url('farbig.png') no-repeat left center;
    height:30px;
    width:50%;
}

In Aktion sieht das dann so aus: Demo.

JavaScript-Fortschrittsbalken

Mit JavaScript kann man den Fortschrittsbalken auch Leben einhauchen, bzw. den angezeigten Wert verändern. Ein einfaches JS-Skript, welches die Breite des inneren Elements ändert ist schnell geschrieben. Im folgenden stelle ich allerdings 4 Skripte/Klassen vor, die noch etwas mehr können als nur das. Das erste Skript basiert auf jQuery/jQuery UI, das zweite benötigt nur jQuery, das dritte ist für Prototype und das vierte verwendet mootools.

Ich habe für jedes Skript eine Demo erstellt: Fortschrittsbalken-Demo

jQueryUI – ProgressBar

Fortschrittsbalken mit jQuery UIDie JS-Bibliothek jQuery UI stellt diverse Werkzeuge und Benutzeroberflächen-Elemente bereit. Unter anderem bietet sie auch eine Klasse zur Erstellung von Fortschrittsbalken. Praktischerweise kann man auf der Download-Seite von jQuery UI direkt die Elemente angeben, die man benötigt, so braucht man nicht die ganze Bibliothek runterzuladen/einzubinden (wenn man nur den Fortschrittsbalken braucht), und spart so einiges an Speicherplatz/Datentransfer. Die Bibliothek basiert auf jQuery, dieses muss also auch eingebunden werden.

Eine Besonderheit von jQuery UI: Das Aussehen der Benutzeroberfläche (und somit des Fortschrittsbalkens) wird durch Themen festgelegt. Auf der Webseite von jQuery UI findet sich (unter Gallery) bereits eine kleine Auswahl von fertigen Themen, natürlich ist es auch möglich eigene Themen zu erstellen. Das Thema wird über eine css-Datei definiert, diese muss ebenfalls in die Seite eingebunden werden.

Einbinden

Benötigt werden: jQuery, jQuery UI (Progressbar), und ein jQuery UI Thema.

<link rel="stylesheet" href="jquery-ui/css/ui-lightness/jquery-ui-1.7.2.custom.css">
<script src="jquery-ui/js/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="jquery-ui/js/jquery-ui-1.7.2.custom.min.js" type="text/javascript"></script>

(Die Pfade müssen eventuell angepasst werden.)

HTML

Man erstellt einfach ein div-Element, den Rest erledigt das Skript. Dem Element kann man noch eine ID geben, das macht es leichter es anzusprechen.

<div id="fsb"></div>

Fortschrittsbalken erstellen

Um den Balken zu erstellen, selektiert man das Ziel-Element mit der $()-Funktion, und ruft die Methode progressbar() auf. Mittels dem Parameter value kann man den Ausgangswert des Fortschrittsbalkens angeben. Außerdem kann man, wenn man möchte, mit dem Parameter change auch gleich eine Funktion festlegen, welche aufgerufen wird, wenn der Wert sich ändert. Beide Parameter sind optional.

$(function () {
    $('#fsb').progressbar({
        value:50,
        change: function () { 
            alert($('#fsb').progressbar('option', 'value') + '%');
        }
    });
});

Methoden und Ereignisse

Die Klasse bietet Methoden zum Abfragen und Ändern des angezeigten Werts, sowie ein Ereignis welches ausgelöst wird, wenn der Wert sich ändert.

// Wert aendern
$('#fsb').progressbar('option', 'value', 50);
// Wert abfragen
var wert = $('#fsb').progressbar('option', 'value');

Weitere Informationen zu der Klasse und ihren Methoden finden sich in der offiziellen Dokumentation.

jQuery – ProgressBar

Fortschrittsbalken mit jQuery Progress BarDas Skript jQuery Progress Bar basiert auf jQuery und bietet einige nützliche Funktionen, die die jQuery UI-Variante nicht hat. Es ist möglich verschiedene Bilder zur Anzeige des Fortschritts zu verwenden, so kann man beispielsweise für die ersten 10-20% einen roten Hintergrund, für die nächsten 10-20% dann einen orangen, dann einen gelben und zum Schluss einen grünen Hintergrund verwenden. Es lässt sich auch festlegen ob neben dem Balken auch der Fortschritt noch einmal als Prozentzahl angezeigt werden soll, und auch eine Anzeige des genauen Wertes (123/465) ist möglich. Außerdem ist die Bewegung des Fortschrittsbalkens animiert, es lässt sich sogar die Geschwindigkeit der Animation festlegen.

Einbinden

Benötigt werden jQuery und das Skript selbst.

<script src="jquery-ui/js/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="jquery.progressbar/js/jquery.progressbar.js" type="text/javascript"></script>

HTML

Auch bei diesem Skript wird nur ein div-Element benötigt, den Rest erstellt das Skript selbst.

<div id="fsb"></div>

Fortschrittsbalken erstellen

Erstellt wird der Fortschrittsbalken mittels der Funktion progressBar(). Dabei gibt es einige Parameter, mittels derer das Aussehen und Verhalten des Fortschrittsbalkens beeinflusst werden können:

  • steps und step_duration: Geben an, wie viele Schritte beim Ändern des Anzeigewertes gegangen werden sollen, und wie lange ein Schritt dauert. (Standard: 20/20)
  • max: Der max. Wert, bis zu dem der Fortschrittsbalken geht. (Standard: 100)
  • showText und textFormat: Ob neben dem Balken noch der Fortschritt in Textform angezeigt werden soll, und ob dieser als Prozentzahl ('percentage' = 50%) oder als Anteil ('fraction' = 50/100) angezeigt werden soll. (Standard: true, 'percentage')
  • width und height: Breite und Höhe des Fortschrittsbalkens bzw. der verwendeten Bilder.
  • callback: Legt eine Funktion fest, welche aufgerufen wird, wenn sich der Balken bewegt. Die Funktion bekommt ein Argument mitgeliefert, welches das config-Feld, erweitert um die Werte increment (um wie viele Pixel hat sich der Balken bewegt), running_value (aktueller Wert) sowie value (Ziel-Wert).
  • boxImage: Pfad zum Bild welches den Balken umschließt.
  • barImage: Pfad zum inneren Bild des Balkens. Hier kann auch ein Feld übergeben werden, falls verschiedene Bilder verwendet werden sollen (siehe Beispiel).
$(function () {
    $('#fsb').progressBar(20, {
        boxImage: 'jquery.progressbar/images/progressbar.gif',
        barImage: {
            0: 'jquery.progressbar/images/progressbg_red.gif',
            30: 'jquery.progressbar/images/progressbg_orange.gif',
            50: 'jquery.progressbar/images/progressbg_yellow.gif',
            70: 'jquery.progressbar/images/progressbg_green.gif'
        }
    });
});

Methoden und Ereignisse

Die Klasse bietet ein Ereignis (callback) und keine Methode. Will man den angezeigten Wert ändern, ruft man die Klasse einfach wieder wie folgt auf:

// Aendere Wert auf 50%.
$('#fsb').progressBar(50);

Prototype – jsProgressBarHandler

Fortschrittsbalken mit Prototype jsProgressBarHandlerDie jsProgressBarHandler-Klasse basiert auf Prototype und steht unter der Creative Commons Attribution-Share Alike 2.5 Lizenz. Das tolle an dieser Klasse ist: Sie kann auch automatisch Fortschrittsbalken erstellen, alle span-Elemente mit der CSS-Klasse progressBar, die einen Prozentwert enthalten, werden automatisch zu Fortschrittsbalken umgewandelt. Der herkömmliche Weg über JavaScript funktioniert natürlich auch.

Einbinden der Klasse

Neben der Klasse selbst, muss auch die JavaScript-Bibliothek Prototype eingebunden werden.

<script src="js/prototype/prototype.js" type="text/javascript"></script>
<script src="js/bramus/jsProgressBarHandler.js" type="text/javascript"></script>

HTML

Die Klasse wandelt alle span-Elemente mit der CSS-Klasse progressBar automatisch in Fortschrittsbalken um.

<span class="progressBar" id="fsb">50%</span>

Möchte man den Balken selbst mittels JavaScript erstellen, benötigt man ein div-Element mit einer ID.

<div id="fsb">[Lade Fortschrittsbalken]</div>

Fortschrittsbalken erstellen

Um den Balken selbst mittels JavaScript zu erstellen, muss man nur ein Objekt der Klasse JS_BRAMUS.jsProgressBar erstellen.

var fsb = new JS_BRAMUS.jsProgressBar(
    'fsb', // ID des div-Elements
    50, // Ausgangswert (Prozent)
    {
        showText : true,
        animate : true,
        barImage : 'jsprogressbarhandler/images/bramus/percentImage_back1.png'
    }
);

Der dritte Parameter kann zur Konfiguration verwendet werden, und ist optional. Folgende Optionen gibt es:

  • animate: Ob der Fortschrittsbalken animiert sein soll. (Standard: ja)
  • showText: Ob der Wert neben dem Balken angezeigt werden soll (Standard: ja)
  • width: Breite des Balkens. Nicht vergessen: Das Bild muss ebenfalls angepasst werden. (Standard: 120)
  • boxImage: Das Bild um den Balken.
  • barImage: Der Hintergrund des Balkens. Hier kann auch ein Feld mit mehreren Bildern angegeben werden, dann ändert sich der Hintergrund, wenn der Balken weiter fortschreitet.
  • height: Die Höhe des Balkens. (Standard: 12)
  • onTick: Funktion die bei jeder Änderung am Wert des Balkens aufgerufen wird.

Die Standardwerte sind am Anfang der jsProgressBarHandler.js definiert. Dort findet sich auch die Variable autoHook, diese kann man auf false setzen, wenn man nicht möchte, das alle span.progressBar-Elemente automatisch umgewandelt werden. Die Pfade zu den Bildern bzw. die Breite/Höhe will/muss man wahrscheinlich eh ändern.

Methoden und Ereignisse

Die Klasse hat zwei Funktionen und ein Ereignis, welches bei jeder Änderung am Wert aufgerufen wird (onTick). Mit der Funktion getPercentage() kann der aktuelle Wert abgefragt werden, mit setPercentage() kann der Wert verändert werden. Letztere Funktion akzeptiert zwei Parameter, der erste gibt den neuen Wert an, der zweite gibt an ob der Balken direkt zum neuen Wert gehen soll. Wenn man den Wert ändert, während der Balken sich noch bewegt, macht er normalerweise zuerst seine Bewegung zu Ende, bevor er zum neuen Wert geht, ist der zweite Parameter true, verwirft er alle anderen Bewegungen und bewegt sich direkt zum neuen Wert.

// Wert abfragen
var aktuellerWert = fsb.getPercentage();
// Wert aendern
fsb.setPercentage(100);

mootools – dwProgressBar

Fortschrittsbalken mit mootools - dwProgressBarDie dwProgressBar-Klasse verfolgt einen etwas anderen Ansatz, als die vorigen beiden Klassen. Mit der Klasse können Fortschrittsbalken erstellt, und der angezeigte Wert geändert werden. Um die Animation kümmert sich die Klasse. Ansonsten können (müssen) die Fortschrittsbalken komplett selbst mittels CSS gestaltet werden.

Einbinden der Klasse

Die JavaScript-Bibliothek mootools wird vorausgesetzt. Außerdem muss natürlich die Klasse selbst eingebunden werden.

<script src="mootools-1.2.3-core-yc.js" type="text/javascript"></script>
<script src="dwprogressbar.js" type="text/javascript"></script>

HTML und CSS

Es wird nur ein div-Element benötigt.

<div id="fsb"></div>

Die Gestaltung des Fortschrittsbalkens übernimmt die Klasse nicht, das muss man selber machen. Es gibt drei Elemente, die gestaltet werden können: Der Rahmen, der Balken, und der Text (optional). Beim Erstellen des Fortschrittsbalkens kann angegeben werden, welche ID die Elemente bekommen sollen, über die ID können die Elemente dann mittels CSS gestaltet werden.

Ohne Bilder

Die CSS-Selektoren für einen Fortschrittsbalken ohne Bilder (aber mit Text) könnten z.B. so aussehen:

#rahmen {
	border:1px solid #8C2229;
	width:200px;
	height:20px;
	padding:1px;
	display:inline-block;
}
 
#balken {
	background:#8C2229;
	height:20px;
}
 
#text {
	font-size:16px;
	line-height:20px;
	vertical-align:top;
	padding-left:10px;
	display:inline-block;
}
Mit Bildern

Wenn man den Fortschrittsbalken mit Bildern gestalten möchte, kann man folgende CSS-Selektoren verwenden. Die Höhen- und Breitenangaben müssen natürlich angepasst werden.

#rahmen {
	background:url('rahmen.png') right center no-repeat;
	width:300px;
	height:30px;
}
 
#balken {
	background:url('balken.png') left center no-repeat;
	height:30px;
}

Den Fortschrittsbalken erstellen

Zum Erstellen des Fortschrittsbalkens wird einfach ein neues dwProgressBar-Objekt erstellt.

window.addEvent('domready', function() {
    var fsb = new dwProgressBar({
        // Das Element, in dem der Fortschrittsbalken angezeigt wird
        container: $('fortschrittsbalken'),
        // Startwert (Prozent)
        startPercentage: 50,
        // Geschwindigkeit/Dauer der Animation (in Millisekunden)
        speed: 1000,
        // Die ID des Rahmens
        boxID: 'rahmen',
        // Die ID des Balkens
        percentageID: 'balken',
        // Wieviel Prozent pro Schritt (dwProgressBar.step() geht
        // immer einen Schritt weiter, in diesem Beispiel also 10%.
        step: 10,
        // Erlaube Werte jenseits 100%
        allowMore: false,
        // Prozentwert als Text anzeigen?
        displayText: true,
        // ID für das Textelement
        displayID: 'text',
        // Ereignis, welches aufgerufen wird, wenn der Balken 100%
        // erreicht.
        onComplete: function () {
            alert("Fertig!");
        },
        // Ereignis welches nach jeder abgeschlossenen Änderung am
        // Wert aufgerufen wird. (Wenn man von 10% auf 50% geht,
        // wird es einmal aufgerufen, nämlich wenn 50% erreicht sind.)
        onChange: function () {
            alert("Wert geändert!");
        }
    });
});

Es müssen nur die Optionen container, boxID und percentageID angegeben werden, der Rest ist optional.

Funktionen und Ereignisse

Die Klasse bietet die Funktionen set(neuerwert) und step(), außerdem die Ereignisse onComplete und onChange. Die Ereignisse sind im obigen Beispielquelltext bereits erklärt.

// Wert auf 100% setzen
fsb.set(100);
// Einen Schritt weitergehen (um options.step Prozent)
fsb.step();

Zum Schluss noch einmal die Demo-Seite für die JavaScript-Fortschrittsbalken: Fortschrittsbalken-Demo

Informationen

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (5 Bewertungen, Durchschnitt: 5.00 von 5)
Loading ... Loading ...
Kategorie: CSS, Java Script
Ansichten: 9,543

Kommentare

Bisher wurden 7 Kommentare geschrieben.

Kommentar schreiben

XHTML: Folgende Elemente sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Angetrieben durch Wordpress Thema erstellt von Antu