2015-07-06 3 views
0

Делал приятную навигацию с использованием преобразований css3. Также для этого была написана несколько javascript.Советы по улучшению кода javascript

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

Перо -->http://codepen.io/rokki_balboa/pen/doOqqv?editors=001

var bar = document.querySelector('.fa-bars'); 
var lis = document.getElementsByTagName('li'); 

    bar.onclick = function() { 

      var delayIn = 0; 
      var delayOut = 1500; 
      if (!(lis[0].classList.contains('accordion'))) { 
        console.log(lis[5]); 
        [].forEach.call(lis, function(el) { 
          setTimeout(function() { 
            el.classList.add('accordion'); 
          }, delayOut); 
          delayOut -= 300; 
        }); 
      } else { 
        [].forEach.call(lis, function(el) { 
          setTimeout(function() { 
            el.classList.remove('accordion'); 
          }, delayIn); 
          delayIn += 300; 
        }); 
      } 

    }; 
+0

Этот вопрос очень расплывчатый, и ответ будет самоуверенным. Что вам не нравится, и каковы ваши критерии успеха? –

+1

вопрос для проверки кода? в чем проблема? –

ответ

1

Если вы просто хотите уменьшить дублирование, это может помочь:

var bar = document.querySelector('.fa-bars'); 
var lis = document.getElementsByTagName('li'); 

bar.onclick = function() { 
    var delay = {in: 0, out: 1500}; 
    var adding = !(lis[0].classList.contains('accordion')); 
    [].forEach.call(lis, function(el) { 
     setTimeout(function() { 
      el.classList[adding ? 'add' : 'remove']('accordion'); 
     }, delay[adding ? 'out' : 'in']); 
     delay[adding ? 'out' : 'in'] += (adding ? -300 : 300); 
    }); 
}; 

Но он делает это в какой-то счет в читаемости. Вам нужно будет сделать вызов вашей кодовой базы, что кажется более удобным для обслуживания.

В будущем https://codereview.stackexchange.com/ - хорошее место для справки по обзору кода.

+0

абсолютно то, что я искал! Большое спасибо Скотту! –

+0

На втором взгляде может быть немного больше очистки, которая может быть достигнута. Вам действительно не нужна двухчастная 'delay', которая может быть перемещена по строке и определена как' var delay = add? 1500: 0', при этом строки ниже просто используются 'delay', а не' delay [...] '. И если вы добавили переменную 'delta', инициализированную' добавлением? -300: 300', вы можете очистить эту последнюю строку, оставив некоторый довольно читаемый код. –

+0

Да, это намного чище: http://codepen.io/anon/pen/aOYVvq?editors=001 –

Смежные вопросы