Закрытие 4 функций с разными параметрами в массиве? - PullRequest
0 голосов
/ 10 января 2019

Я мог бы упростить мой текущий код и закрыть все четыре функции в массиве с передачей им эквивалентных параметров.

function firstFunction() {
  if (sound) {
    var audio = document.getElementById("sound1"); 
    audio.play(); 
  }
  sound = true;
  $('#topleft').addClass('litTopLeft');
}

function secondFunction() {
  if (sound) {
    var audio = document.getElementById("sound2");
    audio.play();  
  }
  sound = true;
  $('#topright').addClass('litTopRight');

}

function thirdFunction() {
  if (sound) {
    var audio = document.getElementById("sound3");
    audio.play();  
  }
  sound = true;
  $('#bottomleft').addClass('litBottomLeft');

}

function fourthFunction() {
  if (sound) {
    var audio = document.getElementById("sound4");
    audio.play();  
  };
  sound = true;
  $('#bottomright').addClass('litBottomRight');

}

Все функции имеют одинаковые параметры, которые необходимо передать как:

 if (sound)
 sound = true;
 audio.play();

Остальные параметры должны быть эквивалентны каждой функции, например:

var audio = document.getElementById("sound1");
$('#topleft').addClass('litTopLeft');

1 Ответ

0 голосов
/ 10 января 2019

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

function playFunction(soundid, targetid, classname) {
  if (sound) {
    var audio = document.getElementById(soundid); 
    audio.play(); 
  }
  sound = true;
  $('#' + targetid).addClass(classname);
}

Тогда вы называете это как:

playFunction('sound1', 'topleft', 'litTopLeft');

Вы можете удалить один из параметров, если целевой идентификатор всегда совпадает с классом с префиксом lit.

function playFunction(soundid, classname) {
  if (sound) {
    var audio = document.getElementById(soundid); 
    audio.play(); 
  }
  sound = true;
  var targetid = classname.replace('lit', '').toLowerCase();
  $('#' + targetid).addClass(classname);
}

Тогда это просто

playFunction('sound1', 'litTopLeft');
...