Signatur
Beschreibung
Die Eigenschaft position kann nur gelesen werden. Sie liefert den Fortschritt eines <progress>-Elements als Gleitkommazahl. Bei einem bestimmten Fortschrittsbalken (das Attribut value ist gesetzt) entspricht der Wert dem Quotienten value / max und liegt immer zwischen 0 und 1.
Bei einem unbestimmten Fortschrittsbalken fehlt das value-Attribut. Dann gibt position den Wert -1 zurück. Daran erkennt man ohne weitere Prüfung, ob der Balken gerade eine Animation für „läuft noch, Dauer unbekannt“ zeigt.
Nützlich ist position, wenn man einen normierten Prozentwert braucht, etwa für Textanzeigen („42 %“), ARIA-Beschriftungen oder eigene Visualisierungen. Die Rechnung mit max muss man dann nicht selbst schreiben. Der Browser begrenzt dabei value automatisch auf den Bereich 0 bis max.
Rückgabewert
0 bis 1 (value / max), bei einem unbestimmten Balken -1.Beispiele
Fortschritt als Prozentwert anzeigen
// HTML: <progress id="upload" value="30" max="120"></progress>
const bar = document.querySelector('#upload');
const prozent = Math.round(bar.position * 100);
console.log(`${prozent} %`);
Unbestimmten Zustand erkennen
const bar = document.createElement('progress');
console.log(bar.position); // kein value-Attribut, also unbestimmt
bar.value = 0.5; // max ist standardmäßig 1
console.log(bar.position);
bar.removeAttribute('value');
console.log(bar.position === -1 ? 'unbestimmt' : 'bestimmt');
Download-Fortschritt mit fetch und Statustext
const bar = document.querySelector('progress');
const status = document.querySelector('#status');
const download = async (url) => {
const res = await fetch(url);
const total = Number(res.headers.get('Content-Length'));
if (total) bar.max = total; else bar.removeAttribute('value');
const reader = res.body.getReader();
let geladen = 0;
while (true) {
const { done, value } = await reader.read();
if (done) break;
geladen += value.length;
if (total) bar.value = geladen;
status.textContent = bar.position === -1
? `${geladen} Bytes geladen …`
: `${(bar.position * 100).toFixed(1)} % geladen`;
}
};
download('/daten/gross.zip');
// Wichtig · Fallstricke
positionkann nur gelesen werden. Eine Zuweisung wird im nicht-strikten Modus stillschweigend ignoriert und löst im Strict Mode einenTypeErroraus. Den Fortschritt ändert man übervalueundmax.- Den Wert
-1für den unbestimmten Zustand sollte man vor der Umrechnung in Prozent prüfen. Sonst erscheint „-100 %“. - Wer
value = 0setzt, macht den Balken zu einem bestimmten Balken mitposition=0. Zurück in den unbestimmten Zustand kommt man nur mitremoveAttribute('value'). - Ungültige oder nicht positive Werte für
maxwerden als1behandelt. Werte fürvalueübermaxwerden aufmaxbegrenzt, deshalb istpositionnie größer als1. - Die Eigenschaft wird in allen modernen Browsern unterstützt. Der Internet Explorer kennt sie ab Version 10.