Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.08.2021, 20:23
Кандидат Javascript-наук
Отправить личное сообщение для od0201 Посмотреть профиль Найти все сообщения от od0201
 
Регистрация: 07.05.2020
Сообщений: 107

audio, узнать когда возможно проиграть
задача, Нужно узнать когда возможно проиграть аудио

когда .catch все срабатывает
когда .then ничего не выводит. в .finally не заходит и console.log('end') не выводит
когда в .then делал clearTimeout тоже ничего не выводило, хотя setInterval прерывало

<body>
</body>
<script>let audio= document.createElement('audio')
  let timerId = setTimeout(async function tick() {
    console.log('begin')
    let a=-1
    await audio.play()
      .then((e)=>{
        console.log('ok')
        a=0
      })
      .catch((error) => {
        timerId = setTimeout(tick, 2500)
        console.log(`play failed because the user didn't interact with the document first`)
        a=1
      })
      .finally(()=>console.log(a))
    console.log('end')
  }, 2500);</script>
Ответить с цитированием
  #2 (permalink)  
Старый 28.08.2021, 00:01
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

Всё срабатывает и выводит:
showhtml:5 begin
showhtml:14 play failed because the user didn't interact with the document first // catch
showhtml:17 1 // finnaly
showhtml:18 end

А играть не будет никогда - потому, почему написано. Запуск play должен быть результатом клика и никак иначе. Либо хотябы одно аудео\видео хоть раз за время сеанса должно было быть запущено в результате клика.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 28.08.2021, 12:13
Кандидат Javascript-наук
Отправить личное сообщение для od0201 Посмотреть профиль Найти все сообщения от od0201
 
Регистрация: 07.05.2020
Сообщений: 107

Давайте детальнее.

1 состояние, когда пользователь не взаимодействует со страницей, то срабатывает .catch() и я уведомляю пользователя о том что он должен выполнить какое-то действие на странице. И это работает !!!!

2 состояние, когда пользователь уже взаимодействовал со станицей, то дожно срабатывать .then(e), где я хочу уведомлять пользователя "все ок, сигнал будет" и здесь есть проблема, все что я делаю в этом блоке, оно не отображается. Также в данном состоянии в .finally() код не срабатывает. Но стоить заметить, что в этом состоянии можно прервать цикл, если использовать setInterval/clearTimeout
Ответить с цитированием
  #4 (permalink)  
Старый 28.08.2021, 13:10
Кандидат Javascript-наук
Отправить личное сообщение для od0201 Посмотреть профиль Найти все сообщения от od0201
 
Регистрация: 07.05.2020
Сообщений: 107

проблема была в том, что код заходит в .then() после окончания проигрывания. Задали audio.src и все стало на свои места
<body>
</body>
<script>
let audio= document.createElement('audio')
audio.src='https://mp3melodii.ru/files_site_02/001/standartnyj_signal_sms_iphone.mp3'
let timerId=setInterval(() => {
  let isPlay=false
  audio.play()
    .then(()=>{console.log('проигрывает');clearInterval(timerId)})
    .catch(() => console.log('не проигрывает'))
}, 2000);
</script>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Узнать значение select, когда их несколько eddin Общие вопросы Javascript 7 01.12.2015 15:35
Как можно узнать когда "якорь" пропал с URL ? Krava Элементы интерфейса 3 14.12.2012 20:25
Как узнать, когда закончилась загрузка dmitry111 Оффтопик 20 03.12.2012 23:32
Возможно ли поменять анимацию, когда Canvas всего один? Solovei95 Общие вопросы Javascript 7 13.12.2011 16:22
Скрипт счетчика тормозит когда вделаю страницу активной denisOgr jQuery 1 30.10.2011 16:15