Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.10.2016, 01:37
Новичок на форуме
Отправить личное сообщение для bumburum Посмотреть профиль Найти все сообщения от bumburum
 
Регистрация: 05.10.2016
Сообщений: 4

Удалить объекты audio или создать лисенер по которому они сами себя грохнут
Подскажите, пожалуйста, я что-то в тупик зашел.

Делаю простой тест: две картинки, вопрос в виде звука. Что-то типа "выбери лошадку". И нужно щелкнуть верную картинку. После этого появляются новые картинки и новый звук вопроса.

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

Звук для следующих картинок создаю при клике на картинки текущего вопроса (идея такая, что если кликнул на картинку, то выбор ты уже сделал и надо выводить следующие картинки со звуком вопроса).

Что-то типа такого:
$("#pictures").on('click', '.kartinka', function(event) {
   ...
   var audioElement = document.createElement('audio');
   audioElement.setAttribute('src', 'sound/'+window.test[window.test_id][5]);
   audioElement.setAttribute('autoplay', 'autoplay');
   audioElement.setAttribute('id', 'question-sound');
    
   audioElement.addEventListener("load", function() {
      audioElement.play();
   }, true);
   ...
}


Тег id создал специально, чтобы можно было грохнуть все текущие звуки и только после этого создавать новый:

var elems = document.getElementById("question-sound");
for(var i=0; i<elems.length; i++) {
   console.log(elems[i].id);
   elems[i].remove();
}


Или так:
$("audio").remove();


Или так:
$('audio').each(function(){
   this.remove();
})


И еще как только не пытался отловить id звука (audio). Звук, зараза, проигрывается, а document.getElementById("question-sound") его не видит. В консоли тишина...

Насколько я могу судить, при создании звукового блока создается лисенер, который ждет загрузки звука и начинает его проигрывать. Т.е. это событие конкретного звука над ним же. Ну типа, как клик на элементе.

Ок. Раз не могу отловить звук по id или имени тега, подумалось с горя, а нельзя ли при создании звука создать ему какой-то лисенер, который будет ждать события не над объектом audio, а скажем, клика на картинке.

Весь бред ситуации в том, что я не могу в обработчике клика по картинке обратиться к объекту audio - пример как пытался (и еще как только не пытался ) выше. Т.е. по моему представлению, каждый создаваемый объект audio должен сам отлавливать все клики мышкой на картинках и при клике самоуничтожаться, чтобы дать новому звуку заполнить эфир. Как это сделать? Можете дать совет? Ну или покажите мне, в чем я затупил.

Последний раз редактировалось bumburum, 05.10.2016 в 01:42.
Ответить с цитированием
  #2 (permalink)  
Старый 05.10.2016, 07:26
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от bumburum Посмотреть сообщение
при создании звукового блока создается лисенер, который ждет загрузки звука и начинает его проигрывать.
Нет у audio события "load", есть метод .load() который переинициализирует audio после изменения свойств.
Сообщение от bumburum Посмотреть сообщение
Можете дать совет?
Рисуешь один элемент
<audio id="audio"></audio>

Функция воспроизведения
function playAudio(src) {
	var audio = document.getElementById('audio');
		audio.src = src;
		audio.load();
		audio.play();
}

Вызываешь в нужном месте с нужным источником
playAudio('sound/' + test[test_id][5]);
Ответить с цитированием
  #3 (permalink)  
Старый 05.10.2016, 11:33
Новичок на форуме
Отправить личное сообщение для bumburum Посмотреть профиль Найти все сообщения от bumburum
 
Регистрация: 05.10.2016
Сообщений: 4

Супер Только зашел сюда, чтобы отписаться, что именно так и сделал, а вы уже успели. Спасибо за ответ!
Ответить с цитированием
  #4 (permalink)  
Старый 05.10.2016, 11:43
Новичок на форуме
Отправить личное сообщение для bumburum Посмотреть профиль Найти все сообщения от bumburum
 
Регистрация: 05.10.2016
Сообщений: 4

Если кому-то пригодится, мне помогла вот эта статейка: https://msdn.microsoft.com/library/g...(v=vs.85).aspx
Ответить с цитированием
  #5 (permalink)  
Старый 05.10.2016, 20:29
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Эдуард Суровый посылает на MSDN. Неисповедимы пути поиска. )
Ответить с цитированием
  #6 (permalink)  
Старый 05.10.2016, 22:01
Новичок на форуме
Отправить личное сообщение для bumburum Посмотреть профиль Найти все сообщения от bumburum
 
Регистрация: 05.10.2016
Сообщений: 4

Это да, сам удивился, если честно. Всегда msdn считал уделом крутых программеров, а вот и я что-то нашел там. И да, я суров! Очень суров!
(c) молоко - пойло лохов! Кефир есть?
Ответить с цитированием
Ответ



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

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