Событие resize никогда не должно использоваться напрямую, так как оно запускается непрерывно при изменении размера.
Используйте функцию debounce для уменьшения лишних вызовов.
window.addEventListener('resize',debounce(handler, delay, immediate),false);
Вот распространенный дебат, распространяющийся по сети, хотя более продвинутые ищите, как featuerd в lodash.
const debounce = (func, wait, immediate) => {
var timeout;
return () => {
const context = this, args = arguments;
const later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
const callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
Это можно использовать так ...
window.addEventListener('resize', debounce(() => console.log('hello'),
200, false), false);
Он никогда не будет срабатывать чаще, чем один раз каждые 200 мс.
Для мобильного изменения ориентации используйте:
window.addEventListener('orientationchange', () => console.log('hello'), false);
Вот небольшая библиотека Я собрал, чтобы аккуратно позаботиться об этом.