@drawoharaя це ❤️ люблю! << натисни мене 🐛 🫖 🧚
/kontrol-html5-audio-na-mobilnih-prystroyah
опубліковано: 2015-01-12

(Спочатку це з'явилося у блозі Spike's Різне… Та інше…)

Теги HTML5 <audio> досить прості. Дано:

<audio id="player"></audio>

цей шматок JavaScript:

player = document.getElementById('player');
player.src = 'some-audio-file-url';
player.play()

розпочне програвання того, на що вказує src. (Порада: Якщо ви використовуєте jQuery, вам потрібно отримати фактичний HTML-елемент із player = $('#player')[0] або player = $('#player').get(0))

Однак, якщо користувач перебуває на мобільному пристрої під керуванням iOS або Android, вищевказане не програє нічого. Жодна з цих операційних систем не дозволяє веб-аудіо (або відео) розпочинати трансляцію без взаємодії користувача. Логіка полягає в тому, що трансляція даних через мережу стільникового зв'язку може коштувати грошей і не повинна відбуватися без фактичного натискання користувачем кнопки.

Все це добре, але що, якщо ви хочете програти звук у відповідь на подію, наприклад, гудіти браузер один раз на хвилину:

player = document.getElementById('player');
player.src = 'beep-url';
beeper = setInterval(function() { player.play(); } ,1000 * 60);

Це буде працювати добре в настільних браузерах, але на мобільних пристроях виклик play() нічого не зробить.

На щастя, є три речі, які роблять обхід простим:

  1. Користувачеві потрібно натиснути play лише один раз на аудіоелемент.
  2. "Натискання play" також може означати спрацьовування play() через подію кліку.
  3. Програвання аудіоелемента без джерела є законною операцією, що нічого не робить.

Коротше кажучи, нам потрібно, щоб користувач натиснув кнопку, яка програє порожній аудіоелемент, щоб отримати контроль над ним:

<audio id="player"></audio>
<button id="ok">OK щоб гудіти</button>
// Припускається jQuery
$("#ok").click(function() {
 player = document.getElementById('player');
 $( this ).slideUp();
 player.play(); // Програйте порожній елемент, щоб отримати контроль
 player.src = 'beep-url'; // Встановіть реальне аудіоджерело
 beeper = setInterval(function() { player.play(); } ,1000 * 60);
});

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

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