JS властивість Event.abort


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

abort — це подія в HTML, яка виникає, коли завантаження медіафайлу, такого як відео або аудіо, скасовується до його завершення. Ця подія часто використовується для обробки ситуацій, коли користувач скасовує завантаження файлу, або коли завантаження переривається з інших причин, наприклад, через проблеми з мережею. Важливо зауважити, що подія abort не поширюється на інші типи елементів, такі як зображення або документи.

Щоб використовувати подію abort у JavaScript, необхідно додати прослуховувач подій (event listener) до медіа-елемента. Це можна зробити за допомогою методу addEventListener(), який дозволяє виконувати певний код у відповідь на подію. Наприклад:

const video = document.querySelector('video');

video.addEventListener('abort', function(event) {
  console.log('Завантаження відео було скасовано.');
});

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

Подія abort є корисною для ситуацій, коли потрібно обробити непередбачені переривання в процесі завантаження медіафайлів. Наприклад, можна відобразити повідомлення користувачу або виконати інші дії для повторного завантаження файлу або реєстрації помилки.

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

Також слід пам'ятати, що подія abort не підтримується для всіх типів елементів. Вона здебільшого використовується з елементами <audio> та <video>, оскільки ці типи файлів можуть займати значну кількість ресурсів і можуть бути скасовані користувачем у процесі завантаження. Наприклад, якщо користувач натискає кнопку "Стоп" під час завантаження відео, подія abort буде викликана.

автор: Bond

Порада

Не використовуйте подію abort для відстеження стану завантаження зображень. Подія abort не підтримується елементом <img>. Якщо потрібно обробити подібні ситуації для зображень, використовуйте подію error або load замість abort.

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

Завжди перевіряйте підтримку подій і методів у різних браузерах. Подія abort підтримується більшістю сучасних браузерів, але завжди варто переконатися в сумісності з тими браузерами, на які ви орієнтуєтесь.

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

Враховуйте можливі сценарії, коли користувачі можуть скасовувати завантаження медіафайлів, наприклад, через обмеження трафіку або недостатню швидкість інтернету. У таких випадках корисно надавати користувачам інформацію про стан завантаження та можливість повторного завантаження файлу.

автор: Bond

Синтаксис

element.addEventListener('abort', function(event) {
  // Ваш код тут
});

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE
66 57 11.1 53 16
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
66 66 57 11.3
Підтримка: серверні переглядачі
Переглядач Node.js Deno
15.0.0 1.0

Приклади

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

HTML

<header>
  <h2 class="title">abort (HTML Event)</h2>
  <p class="description">Виникає, коли завантаження медіафайлу скасовується.</p>
</header>
<main>
  <div class="result">
    <video id="video" width="320" height="240" controls poster="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='320' height='180' viewBox='0 0 320 180'%3E%3Crect width='320' height='180' fill='%23264653'/%3E%3Cpath d='M138 62 192 90 138 118Z' fill='%23e9c46a'/%3E%3Ctext x='160' y='138' font-family='sans-serif' font-size='15' text-anchor='middle' fill='%23e9c46a'%3Eлише звук%3C/text%3E%3C/svg%3E">
      Ваш браузер не підтримує відтворення відео.
    </video>
    <button id="abortButton">Скасувати завантаження</button>
    <p id="message"></p>
  </div>
</main>

CSS

body {
  font-size: 16px;
  line-height: 1.5;
  font-family: monospace;
}

header {
  background-color: #f1f1f1;
  margin-bottom: 25px;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

header h2.title {
  padding-bottom: 15px;
  border-bottom: 1px solid #999;
}

header p.description {
  font-style: italic;
  color: #222;
}

.result {
  background-color: #f8f8f8;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

#abortButton {
  margin-top: 15px;
  padding: 10px 20px;
  background-color: #e74c3c;
  color: #fff;
  border: none;
  cursor: pointer;
  font-size: 16px;
}

#abortButton:hover {
  background-color: #c0392b;
}

#message {
  margin-top: 15px;
  font-weight: bold;
  color: #e74c3c;
}

JS

document.addEventListener('DOMContentLoaded', function () {
  const video = document.getElementById('video');
  const abortButton = document.getElementById('abortButton');
  const message = document.getElementById('message');

  // Джерело: беззвучний WAV, зібраний тут-таки (див. silentWav нижче)
  video.src = silentWav(30);

  // Додаємо слухача події "abort" до відео
  video.addEventListener('abort', function (event) {
    message.textContent = 'Завантаження відео було скасовано!';
  });

  // Функція для скасування завантаження відео
  function abortVideoLoading() {
    video.pause();              // Зупиняємо відтворення
    video.removeAttribute('src');
    video.load();               // Перезавантаження без джерела перериває поточне
  }

  // Додаємо обробник події на кнопку
  abortButton.addEventListener('click', abortVideoLoading);
});

// — службове: беззвучний WAV замість медіафайла, збирається просто тут —
function silentWav(seconds = 3, rate = 8000) {
  const size = seconds * rate;  // 8-бітний моно PCM: один байт на семпл
  const le = (value, bytes) => String.fromCharCode(...Array.from({ length: bytes }, (_, i) => value >> 8 * i & 255));
  const head = `RIFF${le(36 + size, 4)}WAVEfmt ${le(16, 4)}${le(1, 2)}${le(1, 2)}${le(rate, 4)}${le(rate, 4)}${le(1, 2)}${le(8, 2)}data${le(size, 4)}`;

  return `data:audio/wav;base64,${btoa(head + '\u0080'.repeat(size))}`;
}
автор: Bond

HTML

<audio id="melody" controls></audio>
<p><button id="abortButton">Скасувати завантаження</button></p>

JS

const audio = document.getElementById('melody');

audio.src = silentWav(30);

audio.addEventListener('abort', function(event) {
  alert('Завантаження аудіо було скасовано користувачем.');
});

document.getElementById('abortButton').addEventListener('click', function() {
  audio.removeAttribute('src');
  audio.load(); // перезавантаження без джерела перериває поточне
});

// — службове: беззвучний WAV замість медіафайла, збирається просто тут —
function silentWav(seconds = 3, rate = 8000) {
  const size = seconds * rate;  // 8-бітний моно PCM: один байт на семпл
  const le = (value, bytes) => String.fromCharCode(...Array.from({ length: bytes }, (_, i) => value >> 8 * i & 255));
  const head = `RIFF${le(36 + size, 4)}WAVEfmt ${le(16, 4)}${le(1, 2)}${le(1, 2)}${le(rate, 4)}${le(rate, 4)}${le(1, 2)}${le(8, 2)}data${le(size, 4)}`;

  return `data:audio/wav;base64,${btoa(head + '\u0080'.repeat(size))}`;
}
автор: Bond

HTML

<video id="clip" width="320" height="180" controls poster="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='320' height='180' viewBox='0 0 320 180'%3E%3Crect width='320' height='180' fill='%23264653'/%3E%3Cpath d='M138 62 192 90 138 118Z' fill='%23e9c46a'/%3E%3Ctext x='160' y='138' font-family='sans-serif' font-size='15' text-anchor='middle' fill='%23e9c46a'%3Eлише звук%3C/text%3E%3C/svg%3E">
    Ваш браузер не відтворює відео.
</video>
<p><button id="abortButton">Скасувати завантаження</button></p>

JS

const video = document.getElementById('clip');

video.src = silentWav(30);

video.addEventListener('abort', function(event) {
  const currentTime = new Date();
  console.log(`Завантаження було скасовано о ${currentTime.toLocaleTimeString()}`);
});

document.getElementById('abortButton').addEventListener('click', function() {
  video.removeAttribute('src');
  video.load(); // перезавантаження без джерела перериває поточне
});

// — службове: беззвучний WAV замість медіафайла, збирається просто тут —
function silentWav(seconds = 3, rate = 8000) {
  const size = seconds * rate;  // 8-бітний моно PCM: один байт на семпл
  const le = (value, bytes) => String.fromCharCode(...Array.from({ length: bytes }, (_, i) => value >> 8 * i & 255));
  const head = `RIFF${le(36 + size, 4)}WAVEfmt ${le(16, 4)}${le(1, 2)}${le(1, 2)}${le(rate, 4)}${le(rate, 4)}${le(1, 2)}${le(8, 2)}data${le(size, 4)}`;

  return `data:audio/wav;base64,${btoa(head + '\u0080'.repeat(size))}`;
}
автор: Bond

Коментарі

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

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

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

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

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