В JavaScript, как я могу запустить функцию только ОДИН РАЗ в цикле for? - PullRequest
0 голосов
/ 16 мая 2018

Я перечитал подобные вопросы многих людей и не нашел ответа.Поэтому я задаю свой вопрос.

Я создаю функцию, которая позволяет моим пользователям воспроизводить все аудиодорожки на странице, которую они просматривают.Однако, чтобы мой аудиоплеер изначально отображался на странице, мне нужно хотя бы один раз initPlayer(), когда пользователь нажимает кнопку Play All.

Проблема в том, что я использую цикл for для итерациивсе идентификаторы песен в массиве, чтобы заполнить список воспроизведения песнями.

var theids = ids.split(",");

for (var i = 0; i < theids.length; i++) {
  getItem(theids[i], type).done(function(obj) {
    if (obj.status == 'success') {
      mep.mepPlaylistTracks = obj.tracks;
      initPlayer();
      addToPlay(obj.tracks, play);
    }
  });
}

initPlayer() использует информацию из моей функции getItem(), чтобы правильно инициировать первый раз.Таким образом, он должен быть расположен в следующем порядке.

Есть ли способ, которым я могу запустить свою функцию initPlayer() только один раз в моем цикле for?Это заставляет мой проигрыватель переинициализироваться каждый раз, когда песня добавляется в список воспроизведения, что вызывает проблемы с производительностью и визуальными проблемами.

Возможны ли такие вещи в Javascript?


Правитьдобавить функции initPlayer() и getItem().Я новичок в Javascript, любая помощь приветствуется.

// init player
  function initPlayer(){
    $('.app-player').removeClass('hide');
    $('#app').removeClass('hide-player');

    var playlist = $( '.playlist' ).mepPlaylist({
      audioHeight: '40',
      audioWidth: '100%',
      videoHeight: '40',
      videoWidth: '100%',
      audioVolume: 'vertical',
      mepPlaylistLoop: true,
      alwaysShowControls: true,
      mepSkin: 'mejs-audio',
      mepResponsiveProgress: true,
      mepAutoPlay: false,
      mepSelectors: {
        playlist: '.playlist',
        track: '.track',
        tracklist: '.tracks'
      },
      features: [
        //'meplike',
        'mepartwork',
        'mepcurrentdetails',
        'mepplaylist',
        'mephistory',
        'mepprevioustrack',
        'playpause',
        'mepnexttrack',
        'progress',
        'current',
        'duration',
        'volume',
        'mepicons',
        'meprepeat',
        'mepshuffle',
        'mepsource',
        'mepbuffering',
        'meptracklist',
        'mepplaylisttoggle',
        'youtube'
      ],
      mepPlaylistTracks: mep.mepPlaylistTracks
    });

function getItem(id, type){
    return $.ajax({
       type : "post",
       dataType : "json",
       url : ajax.ajax_url,
       data : {action: "ajax_music", id: id, type: type, nonce: ajax.nonce}
    });
  }

1 Ответ

0 голосов
/ 16 мая 2018

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

var theids = ids.split(",");
var once = false;

for (var i = 0; i < theids.length; i++) {
  getItem(theids[i], type).done(function(obj) {
    if (obj.status == 'success') {
      mep.mepPlaylistTracks = obj.tracks;

      if(!once) {
          initPlayer();
          once = true;
      }

      addToPlay(obj.tracks, play);
    }
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...