Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.05.2017, 19:32
Новичок на форуме
Отправить личное сообщение для tatynechka Посмотреть профиль Найти все сообщения от tatynechka
 
Регистрация: 14.04.2015
Сообщений: 7

Как остановить плеер, когда играет другой
Здравствуйте. Очень надеюсь на вашу помощь, сама уже несколько дней мучаюсь.
На странице есть несколько плееров с плейлистами. Нужно сделать так, что бы при нажатии на play играл только текущий, а остальные ставились на паузу. Сейчас если у каждого нажать play, то они хором поют Пример на jsfiddle https://jsfiddle.net/xt2ubjjv/

html код
<!--первый плеер  -->
<div class="audio-item">
    <div class="player">
        <div class="pl"></div>
        <div class="meta-block">
            <div class="artist">О любви</div>
            <div class="desc">Романтика, инструментальная</div>
            <div class="title"></div>
        </div>
        <div class="cover"></div>
        <div class="controls">
            <div class="play"></div>
            <div class="pause"></div>
            <div class="rew"></div>
            <div class="fwd"></div>
        </div>
        <div class="volume"></div>
        <div class="tracker"></div>
    </div>
    <ul class="playlist">
        <li audiourl="img/mp3/01.mp3" cover="img/mp3/cover1.jpg">
            <span class="name-track">Песня 1</span>
            <span class="time-track">3:08</span>
        </li>
        <li audiourl="img/mp3/02.mp3" cover="img/mp3/cover2.jpg">
            <span class="name-track">Песня 2</span>
            <span class="time-track">3:08</span>
        </li>
        <li audiourl="img/mp3/03.mp3" cover="img/mp3/cover3.jpg">
            <span class="name-track">Песня 3</span>
            <span class="time-track">3:08</span>
        </li>
    </ul>
</div>
 
<!--второй плеер  -->
<div class="audio-item">
    <div class="player">
        <div class="pl"></div>
        <div class="meta-block">
            <div class="artist">О любви</div>
            <div class="desc">Романтика, инструментальная</div>
            <div class="title"></div>
        </div>
        <div class="cover"></div>
        <div class="controls">
            <div class="play"></div>
            <div class="pause"></div>
            <div class="rew"></div>
            <div class="fwd"></div>
        </div>
        <div class="volume"></div>
        <div class="tracker"></div>
    </div>
    <ul class="playlist">
        <li audiourl="img/mp3/01.mp3" cover="img/mp3/cover1.jpg">
            <span class="name-track">Песня 1</span>
            <span class="time-track">3:08</span>
        </li>
        <li audiourl="img/mp3/02.mp3" cover="img/mp3/cover2.jpg">
            <span class="name-track">Песня 2</span>
            <span class="time-track">3:08</span>
        </li>
        <li audiourl="img/mp3/03.mp3" cover="img/mp3/cover3.jpg">
            <span class="name-track">Песня 3</span>
            <span class="time-track">3:08</span>
        </li>
    </ul>
</div>


скрипт плеера
$('.audio-item').each(function() {
 
    var $container=$(this);
 
    // inner variables
    var song;
    var tracker = $container.find('.tracker');
    var volume = $container.find('.volume');
    var dVol = 0.8;
 
    function initAudio(elem) {
        var url = elem.attr('audiourl');
        var title = elem.find('.name-track').text();
        var cover = elem.attr('cover');
        var artist = elem.attr('artist');
 
        $container.find('.player .title').text(title);
        $container.find('.player .artist').text(artist);
        $container.find('.player .cover').css('background-image','url('+cover+')');
 
        song = new Audio(url);
 
        song.volume = dVol;
 
        // timeupdate event listener
        song.addEventListener('timeupdate',function (){
            var curtime = parseInt(song.currentTime, 10);
            tracker.slider('value', curtime);
        });
 
        $container.find('.playlist li').removeClass('active');
        elem.addClass('active');
    }
    function playAudio() {
        song.play();
 
        //tracker.slider("option", "max", song.duration);
 
        $container.find('.play').addClass('hidden');
        $container.find('.pause').addClass('visible');
 
        // автопроигрывание следующего трека
        song.addEventListener('ended', function(){
          stopAudio();
 
          var next = $container.find('.playlist li.active').next();
          if (next.length == 0) {
            next = $container.find('.playlist li:first-child');
          }
          initAudio(next);
 
          playAudio();
 
          song.addEventListener('loadedmetadata', function() {
            tracker.slider('option', 'max', song.duration);
          });
        });
    }
    function stopAudio() {
        song.pause();
 
        $container.find('.play').removeClass('hidden');
        $container.find('.pause').removeClass('visible');
    }
 
    // play click
    $container.find('.play').click(function (e) {
        e.preventDefault();
 
        playAudio();
        tracker.slider("option", "max", song.duration);
    });
 
    // pause click
    $container.find('.pause').click(function (e) {
        e.preventDefault();
 
        stopAudio();
    });
 
    // forward click
    $container.find('.fwd').click(function (e) {
        e.preventDefault();
 
        stopAudio();
 
        var next = $container.find('.playlist li.active').next();
        if (next.length == 0) {
            next = $container.find('.playlist li:first-child');
        }
        initAudio(next);
        playAudio(next);
 
    });
 
    // rewind click
    $container.find('.rew').click(function (e) {
        e.preventDefault();
 
        stopAudio();
 
        var prev = $container.find('.playlist li.active').prev();
        if (prev.length == 0) {
            prev = $container.find('.playlist li:last-child');
        }
        initAudio(prev);
        playAudio(prev);
 
    });
 
    // show playlist
    $container.find('.pl').click(function (e) {
        e.preventDefault();
 
        //$container.find('.playlist').fadeIn(300);
        $container.find('.playlist').toggleClass('playlist-close');
    });
 
    // playlist elements - click
    $container.find('.playlist li').click(function () {
        stopAudio();
        initAudio($(this));
        playAudio($(this));
    });
 
    // initialization - first element in playlist
    initAudio($container.find('.playlist li:first-child'));
 
    // set volume
    song.volume = 0.8;
 
    // initialize the volume slider
    volume.slider({
        range: 'min',
        min: 1,
        max: 100,
        value: 80,
        start: function(event,ui) {},
        slide: function(event, ui) {
            song.volume = ui.value / 100;
            dVol = ui.value / 100;
        },
        stop: function(event,ui) {},
    });
 
    // empty tracker slider
    tracker.slider({
        range: 'min',
        min: 0, max: 10,
        start: function(event,ui) {},
        slide: function(event, ui) {
            song.currentTime = ui.value;
        },
        stop: function(event,ui) {}
    });
});
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как лучше защитить код от копирования на другой сайт? Опан Общие вопросы Javascript 10 21.08.2015 21:29
как остановить функцию? vladimir7517 jQuery 10 11.10.2013 13:17
Остановить выполнение функции внутри другой функции ami_moor Общие вопросы Javascript 4 17.09.2013 14:02
как сгенерировать script-ом ДРУГОЙ файл? 1.regulum Общие вопросы Javascript 7 10.07.2009 12:19
Переменная от переменной или как к имени переменной конкатенировать значение другой Aderba jQuery 5 12.11.2008 15:25