Индикатор загрузки

#javascript #html #audio #onclick

#javascript #HTML #Аудио #onclick

Вопрос:

Я работаю над проектом, который требует воспроизведения звука при нажатии на ссылку. Все работает нормально, я использовал приведенный ниже Javascript. Проблема в том, что требуется около 30 секунд (в зависимости от скорости Интернета), прежде чем вы действительно услышите файл, потому что браузер должен его загрузить. Есть ли способ адаптировать приведенный ниже код для отображения индикатора загрузки файла?

 <bgsound id="sound">
<script>
function PlaySound(url) {
  document.all.sound.src = url;
}
</script>
  

и это в качестве ссылки:

 <a href="#" onClick="PlaySound('/Lang/sounds/<?php echo $pid ?>A.wav')">Play</a>
  

Комментарии:

1. Что-то вроде вращения при загрузке?

2. @Jcubed, это было бы здорово!

Ответ №1:

Предупреждение о том, что «bgsound» является собственностью Internet Explorer, насколько я знаю. Сказав это, вы можете подписаться на его событие «readystatechage», чтобы узнать, когда загрузка будет завершена …. (непроверено! поскольку у меня нет IE)

 <div id="soundLoading" style="display: none;"><img src="someani.gif" /></div>
<bgsound id="sound">
<script>
function PlaySound(url) {
  // Setup some loading animation here......
  document.all.soundLoading.style.display = "inline";

  // Add event listener and set the sound source
  sound.onreadystatechange = CheckSoundLoaded;
  document.all.sound.src = url;
}

function CheckSoundLoaded() {
  if(document.all.sound.readyState == 4) {
    // sound is loaded, remove loading animation
    document.all.soundLoading.style.display = "none";
  }
}
</script>
  

http://www.highdots.com/forums/javascript/finding-when-bgsound-downloads-47830.html

Комментарии:

1. Возможно ли изменить изображение ссылки? Вместо изменения текста ‘Play’ на загружаемом изображении, измените изображение, скажите ‘Play.gif ‘, к загружаемому изображению, затем обратно после завершения?

2. @Zachary, теоретически это можно было бы сделать, но, похоже, я не могу заставить приведенный выше код функционировать в IE9 на работе. CheckSoundLoaded просто никогда не вызывается. Похоже, IE9 в любом случае теперь поддерживает тег «audio», поэтому я думаю, что идти по пути «bgsound», вероятно, плохая идея. Я бы проверил некоторые другие решения. 🙂

3. Я просто не могу заставить его реализовать, как только он закончит загрузку аудио. Думаете, onreadystatechange недоступен для IE9? Я хотел бы оставаться в курсе самых последних браузеров, так что это было бы проблемой.

4. Я также не смог заставить его работать, хотя предоставленная ссылка предполагает, что это должно. Если вы хотите работать в современном браузере, вам лучше забыть об использовании BGSOUND вообще, поскольку это специфичный для IE тег, который не работает в Chrome, Opera и т.д. Тег <audio> является новым для HTML5, но я также не знаю, какую поддержку x-browser он имеет. Возможно, вам придется заглянуть в предварительно созданную библиотеку, которая обрабатывает аудио в браузерах?

Ответ №2:

Простой

Самый простой метод — заменить текст ‘Play’ для ссылки на ‘Loading …’:

 <script type="text/javascript">
    //<![CDATA[
    function PlaySound(url, anchor) {
      anchor.innerHTML = 'Loading...';
      document.all.sound.src = url;
    }
    //]]>
</script>

<a href="#" onClick="PlaySound('/Lang/sounds/<?php echo $pid ?>A.wav', this)">Play</a>
  

Вот демонстрационный JS Fiddle.


Более продвинутый

Другой вариант — заменить текст привязки анимированным gif:

 <script type="text/javascript">
    //<![CDATA[
    function PlaySound(url, anchor) {
      anchor.innerHTML = '<img src="http://www.fordesigner.com/pic/zip/200916124527437778027.gif"/> Loading...';
      document.all.sound.src = url;
    }
    //]]>
</script>

<a href="#" onClick="PlaySound('/Lang/sounds/<?php echo $pid ?>A.wav', this)">Play</a>
  

Вот пример JS Fiddle.

Комментарии:

1. Итак, должен ли я определить тег id в тексте как «якорь» в этом примере?

2. @Zachary Brown anchor — это второй параметр в onClick функции, прикрепленной к якорю (внизу моего примера), это this . В данном случае this означает «Привязка, на которую был нажат»

3. О, хорошо. Теперь я это вижу. Мне нравится ваш пример, потому что он прост и прямолинейен, но можно ли его модифицировать, чтобы изменить текст после его загрузки. У меня возник еще один вопрос: можно ли изменить изображение ссылки link, чтобы указать, что она загружалась, а затем изменить ее обратно после загрузки?