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
1 3.5 3.1 12.1 12
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
37 18 4 2
Підтримка: серверні переглядачі
Переглядач Node.js Deno
- -

Приклади

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

Цей приклад демонструє використання 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

Коментарі

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

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

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

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

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

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

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

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

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

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

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