Задать вопрос

Как избавиться от лишней нагрузки при изменении размера окна?

Здравствуйте! Во время доработки адаптивности сайта заметил такую вещь, что при уменьшении размера окна браузера фиксируется двойное изменение.. поясню:
Если отслеживать onresize через консоль, то при уменьшении размера окна фиксируется двойное изменение, а при увеличении единичное.. в чем загвоздочка и почему так происходит? у всех ли так?

Вот код для теста (на фидле не работает):
var text = document.getElementById('text');
window.addEventListener("resize", function () {
	// document.write('был изменён размер окна<br/>');
	text.innerHTML += 'был изменён размер окна<br/>';
	console.log('test');
});

Где я попробовал отслеживать как через консоль, так и через innerHTML, так и через document.write.
Если убрать комментарий с d.w, то будет фиксироваться одно уменьшение, что за дрянь такая?

P.S. Тестировал в Chrome, уменьшал иконкой "Свернуть в окно", text - div;
  • Вопрос задан
  • 145 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Профессиональная вёрстка на HTML и CSS
    3 месяца
    Далее
  • Stepik
    Основы HTML и CSS
    2 недели
    Далее
  • OTUS
    HTML/CSS
    3 месяца
    Далее
Решения вопроса 1
Наблюдаю такое поведение в Хроме при уменьшении окна браузера, только если открыта консоль. Если консоль закрыта, то событие срабатывает только раз.

Можно использовать функцию дебаунсера:
function debouncer(func, timeout) {
  var timeout = timeout || 200;
  var timeoutID;
  
  return function () {
    var self = this;
    
    clearTimeout(timeoutID);
    
    timeoutID = setTimeout(function() {
      func.apply(self, Array.prototype.slice.call(arguments));
    }, timeout);
  }
}

var text = document.getElementById('text');

window.addEventListener("resize", debouncer(function(e) {
  text.innerHTML += 'был изменён размер окна<br/>';
  console.log('test');
}));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы