За последние 24 часа нас посетили 22935 программистов и 1246 роботов. Сейчас ищут 722 программиста ...

Воспроизведение в случайном порядке

Тема в разделе "JavaScript и AJAX", создана пользователем Econaft, 28 сен 2022.

  1. Econaft

    Econaft Активный пользователь

    С нами с:
    28 июн 2014
    Сообщения:
    86
    Симпатии:
    1
    Есть рабочий код:

    Код (Text):
    1.     <audio class="main_player" src="sounds/1.mp3" controls></audio>
    2.  
    3. <script>
    4. let mainPlayer = document.querySelector('.main_player'),
    5.     currentSound = 1, // текущий проигрываемый трек
    6.     counterSounds = 6; // к-во треков для проигрывания
    7.  
    8.  
    9. mainPlayer.addEventListener("ended", ()=>{
    10.     if(currentSound > counterSounds){
    11.         currentSound = 1;
    12.     }
    13.     mainPlayer.src = `sounds/${currentSound}.mp3`;
    14.     mainPlayer.play();
    15.     currentSound++;
    16. });
    17. </script>
    Всё прекрасно работает.
    Нужно, чтобы воспроизведение треков происходило в случайном порядке.
    Как сделать?
     
  2. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    861
    Симпатии:
    132
    Заполнить массив значениями от 1 до counterSounds, перемешать значения, перебрать их и подставить в `sounds/${currentSound}.mp3`.
    Как на JS перемешивать значения массива -- Гугл в помощь.
     
    Econaft нравится это.
  3. Econaft

    Econaft Активный пользователь

    С нами с:
    28 июн 2014
    Сообщения:
    86
    Симпатии:
    1
    Так правильно?

    Код (Text):
    1. let arr = [1, 2, 3, 4, 5, 6];
    2.  
    3. mainPlayer.src = `sounds/${arr.currentSound}.mp3`;
    4.     mainPlayer.play();
    5.     currentSound++;
     
  4. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    861
    Симпатии:
    132
    Нет. Массив не перемешан, с индексами массива тоже смотрю всё запущено, азы бы JS подучить.
     
  5. Econaft

    Econaft Активный пользователь

    С нами с:
    28 июн 2014
    Сообщения:
    86
    Симпатии:
    1
    Так, перемешиваю:

    Код (Text):
    1. let arr = [1, 2, 3, 4, 5, 6];
    2. arr = list.sort(() => Math.random() - 0.5);
    Так?

    Код (Text):
    1. mainPlayer.src = `sounds/${arr[currentSound]}.mp3`;
    2.     mainPlayer.play();
    3.     currentSound++;
     
  6. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    861
    Симпатии:
    132
    Нет, не так, в консоли браузера запусти и убедись.
     
  7. kadet166

    kadet166 Новичок

    С нами с:
    15 мар 2022
    Сообщения:
    13
    Симпатии:
    5
    Я в js не разбираюсь, просто решил попробовать.
    Код (Text):
    1. <audio class="main_player" src="sounds/1.mp3" controls></audio>
    2.   <script>
    3.     let mainPlayer = document.querySelector('.main_player'),
    4.     counterSounds = 6; // к-во треков для проигрывания
    5.  
    6.     mainPlayer.addEventListener("ended", ()=>{
    7.         currentSound = ( Math.floor(Math.random() * Math.floor(counterSounds)) )+1;
    8.         mainPlayer.src = `sounds/${currentSound}.mp3`;
    9.         mainPlayer.play();
    10.     });
    11.     </script>
     
    Econaft нравится это.
  8. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    861
    Симпатии:
    132
    Тогда регулярно будет встречаться ситуация, когда играет подряд один и тот же трек.
     
  9. kadet166

    kadet166 Новичок

    С нами с:
    15 мар 2022
    Сообщения:
    13
    Симпатии:
    5
    Да я это заметил, но пока не приходят мысли как это поправить.
     
  10. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    861
    Симпатии:
    132
  11. kadet166

    kadet166 Новичок

    С нами с:
    15 мар 2022
    Сообщения:
    13
    Симпатии:
    5
    Пока времени нету, может потом попробую.
     
    Econaft нравится это.
  12. kadet166

    kadet166 Новичок

    С нами с:
    15 мар 2022
    Сообщения:
    13
    Симпатии:
    5
    Понедельник день тяжелый.
    Код (Text):
    1. <audio class="main_player" src="sounds/1.mp3" controls></audio>
    2.   <script>
    3.     let mainPlayer = document.querySelector('.main_player');
    4.     let counterSounds = [1, 2, 3, 4, 5, 6];
    5.     counterSounds = counterSounds.sort(() => Math.random() - 0.5);
    6.     let i = 0;
    7.     mainPlayer.addEventListener("ended", ()=>{
    8.         mainPlayer.src = `sounds/${counterSounds[i++]}.mp3`;
    9.         i = i % counterSounds.length;
    10.         mainPlayer.play();
    11.     });
    12.     </script>
     
    Econaft и don.bidon нравится это.