JS об'єкт ProgressEvent


Загальний опис

ProgressEvent – це події JavaScript, які використовуються для відстеження процесу завантаження або передачі даних, таких як завантаження файлів, зображень, відео або запити на сервер. До основних подій належать loadstart, progress, load, loadend, abort, error та timeout. Кожна з цих подій допомагає визначити різні етапи завантаження: наприклад, progress інформує про поточний стан завантаження, а loadend спрацьовує при завершенні завантаження незалежно від успіху або помилки.

Подія progress найчастіше використовується для інформування користувача про стан завантаження, зокрема через відображення індикатора прогресу. Об'єкт ProgressEvent містить властивість loaded, яка показує кількість байтів, що були завантажені, та властивість total, яка вказує на загальний розмір. Якщо total доступний, можна обчислити відсоток завантаження за формулою (loaded / total) * 100.

Приклад використання progress:

xhr.onprogress = function(event) {
  if (event.lengthComputable) {
    let percentComplete = (event.loaded / event.total) * 100;
    console.log(`Завантажено: ${percentComplete}%`);
  }
};

Цей приклад показує використання події progress для обчислення відсотка завантаження під час HTTP-запиту. Метод lengthComputable визначає, чи відомий загальний розмір файлу (event.total). Якщо він невідомий, event.total буде недоступним, і прогрес можна лише відслідковувати частково.

ProgressEvent також працюють у випадках завантаження медіафайлів через об'єкти типу FileReader або <img>. Наприклад, у File API для зчитування великих файлів з локальної файлової системи FileReader може викликати progress події для оновлення користувача щодо статусу завантаження. Це робить ProgressEvent універсальним інструментом для відстеження будь-яких видів передачі даних.

автор: Bond

Порада

Оберіть події для відміни або скидання завантаження. Враховуйте, що користувач може скасувати завантаження, і тоді буде корисно обробити події abort або error. Це забезпечить стабільність роботи вашого індикатора прогресу і дасть можливість відобразити стан скасування.

автор: Bond
Порада

Уникайте progress для дрібних завантажень. Для невеликих запитів progress подія може не знадобитися, оскільки прогрес може виглядати миттєвим. Краще зосередитись на більших файлах або запитах, які потребують значного часу на завантаження.

автор: Bond
Порада

Якщо відсоток прогресу постійно 100%, перевірте подію loadend. Якщо подія progress показує максимальне завантаження, це може означати, що дані вже були отримані, але не завершене завантаження. Тому додатково використовуйте loadend для обробки остаточного завершення процесу.

автор: Bond

Синтаксис

element.addEventListener('progress', function(event) {
  if (event.lengthComputable) {
    const percentComplete = (event.loaded / event.total) * 100;
    console.log(`Прогрес: ${percentComplete}%`);
  }
});

властивості

Властивість Опис
lengthComputable Вказує, чи можна обчислити загальну довжину (розмір) операції завантаження. Повертає `true`, якщо відомо загальний обсяг даних для завантаження, і `false` в іншому випадку.
loaded Повертає кількість байтів, які були успішно завантажені на поточний момент. Використовується для визначення прогресу завантаження.
total Показує загальний обсяг байтів, який потрібно завантажити, якщо він відомий. У поєднанні з `loaded` допомагає обчислювати відсоток завантаження.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 3.5 3.1 ≤12.1 12 10
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 2
Підтримка: серверні переглядачі
Переглядач Deno
1.3

Приклади

+ запропонувати свій приклад у пісочниці

Цей приклад демонструє використання ProgressEvent з FileReader для зчитування локального файлу, вибраного користувачем. При читанні файлу подія progress показує відсоток, що дозволяє відслідковувати, наскільки завантажено файл у пам'ять.

HTML

<input type="text" id="fileInput" value="текст для прикладу" placeholder="Введи щось">

JS

const fileInput = document.querySelector("#fileInput");
const reader = new FileReader();

reader.onprogress = function(event) {
  if (event.lengthComputable) {
    let percentComplete = (event.loaded / event.total) * 100;
    console.log(`Читання файлу: ${percentComplete.toFixed(2)}%`);
  }
};

reader.onloadend = function() {
  console.log("Читання файлу завершено!");
};

fileInput.addEventListener("change", function() {
  const file = fileInput.files[0];
  if (file) {
    reader.readAsDataURL(file);
  }
});
автор: Bond

Цей код завантажує великий файл і відстежує його прогрес. Подія progress використовується для обчислення і відображення відсотка завантаження, а також є обробники для завершення (onload) та помилки (onerror). Це підходить для відстеження великих завантажень, які потребують часу.

const xhr = new XMLHttpRequest();
xhr.open("GET", "https://example.com/largefile", true);

xhr.onprogress = function(event) {
  if (event.lengthComputable) {
    let percentComplete = (event.loaded / event.total) * 100;
    console.log(`Завантажено: ${percentComplete.toFixed(2)}%`);
  }
};

xhr.onload = function() {
  console.log("Завантаження завершено!");
};

xhr.onerror = function() {
  console.log("Помилка при завантаженні файлу.");
};

xhr.send();
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід