JavaScript Progressbar erstellen und aktualisieren, aber wie?

Sithys

Captain
Registriert
Dez. 2010
Beiträge
3.425
Moin zusammen,
habe ein Upload Script welches einwandfrei funktioniert und ein Video an meinen Server übermittelt. Nun möchte ich gerne, dass dem User eine Statusbar angezeigt wird, während der Upload stattfindet.

Um überhaupt mal einen Wert der % herauszubekommen nutze ich derzeit ein Script aus dem Internet ->

Code:
ft.onprogress = function(progressEvent) {
				if (progressEvent.lengthComputable) {
			var perc = Math.floor(progressEvent.loaded / progressEvent.total * 100);
		statusDom.innerHTML = perc + "% loaded...";
				console.log(perc);
				} else {
						if(statusDom.innerHTML == "") {
						statusDom.innerHTML = "Loading";
				} else {
						statusDom.innerHTML += ".";
				}
			}
		};

Das funktioniert auch soweit so gut, die Prozentzahl rattert unter dem Video hoch und irgendwann ists dann fertig.

Wie aber bekomme ich die Werte in eine progressbar die sich dann füllt?
Habe von JavaScript leider nicht sonderlich viel Ahnung :-/
 
Zuletzt bearbeitet:
Das klingt alles sinnig und danke für die Antwort, aber wie gesagt, ich hab keine Ahnung von Javascript. Klar, die bar mit hinterher mit CSS zurecht basteln ist kein Thema. Auch eine <progress></progress>-bar einzusetzen nicht.

jQuery benutze ich schon, deswegen würde ich gerne auf Bootstrap verzichten. Mit Javascript/jQuery den DOM zu verändern, das ist mein Problem (:
 
Ja klar, aber der Wert ändert sich ja stetig und soll die ganze Zeit angepasst werden, und genau das ist mein Problem :-/
 
Im Endeffekt:
- du erzeugst ein <div>, dass deinen gesamten Ladebalken-Platz darstellt. Die Breite von dem Ding ermittelt sich aus den umliegenden Containern oder CSS
- du legst ein <div> in diesen Ladebalken, dass dein eigentlicher Balken ist.
- Da, wo aktuell "statusDom.innerHTML = perc + "% loaded...";" steht, packst du noch ne Kleinigkeit dazu: Du gibst deinem inneren <div> einfach ne Width von perc+'%'.
 
jQuery UI im Einsatz? Das hat schon ne ProgressBar. Ansonsten ist es doch nicht schwer zwei Divs ineinanderzulegen - eins für den Container, eins für den Status - und zusätzlich noch ein Label dazupacken In jQuery kannst du dann einfach mittels
Code:
$('label', $('progressbar-selektor')).text( '5 %' )
den Text des Labels setzen und die Breite der Leiste im Container setzt du einfach mittels simplem CSS
Code:
$('div', $('progressbar-selektor')).css( {width: '5%'} );
So hast du ganz einfach ne simple ProgressBar selbst gebastelt, die dazu noch individuell anpassbar ist (ohne auf das starre progress-Tag zu setzen).
 
Hey und danke für Eure ganzen Tipps,

@Daaron ich habs wie folgt versucht ->

Code:
var e1 = document.getElementById("status2");

Code:
ft.onprogress = function(progressEvent) {
	if (progressEvent.lengthComputable) {
		var perc = Math.floor(progressEvent.loaded / progressEvent.total * 100);
		statusDom.innerHTML = perc + "% loaded...";
		e1.style.width = perc + "%";

Code:
#status {  
    background-color: #f3f3f3;  
    border: 0;  
    height: 18px;  
    width: 90%;
    border-radius: 9px; 
} 

#status2{
    color: green;
    background-color: green;
    width: 180px;
    height: 10px;
}

Code:
<div id="status">
       <div id="status2">
                                  
       </div>
</div>

Funktioniert nur so leider noch nicht, ich bin aber nebenbei noch am Basteln - mach ich was grundlegend verkehrt?

Also, ich habe jetzt einen grünen balken im zweiten div und wenn ich den Upload starte, verschwindet dieser vollständig, es tut sich also was.

Was ist denn mit meiner JS anweisung, mit der variablen e1 und dann perc + "%", und e1.style.width ist das so korrekt?

/Edit: Nächster Versuch, aber geht leider noch nicht:
Code:
ft.onprogress = function(progressEvent) {
	if (progressEvent.lengthComputable) {
		var perc = Math.floor(progressEvent.loaded / progressEvent.total * 100);
		statusDom.innerHTML = perc + "% loaded...";
		document.getElementById("status2").style.width = perc + "%";
 
Zuletzt bearbeitet:
... ich arbeite ja mit iOS und kann nur dort debuggen ^^ ich kann mir höchstens zum schluss noch mal ausgeben lassen, moment.

alert(document.getElementById("status2").style.width);

der gibt schon mal gar nichts aus x)

Ist der alert verkehrt? Den führt er gar nicht aus, da bricht das Script dann ab!?


Läuft!

document.getElementById("ft-prog").value = perc;

<progress></progress>
 
Zuletzt bearbeitet:
Du arbeitest mit jQuery, nutzt aber document.getElementById()?

Also arbeitest du wohl eher *nicht* mit jQuery...
Mit jQuery wäre es dann sowas wie:
Code:
$("#status2").css("width", perc);
 
Zurück
Oben