Я вызываю функцию, когда размер окна изменяется следующим образом:

window.addEventListener("resize", calculateDimensions());

Но мне нужен способ вызова другой функции ПОСЛЕ изменения размера окна. Есть ли способ добиться этого, используя родной JS (не JQuery)

Tia

6
Ronny vdb 27 Авг 2017 в 15:54

3 ответа

Лучший ответ

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

function debounce(func){
  var timer;
  return function(event){
    if(timer) clearTimeout(timer);
    timer = setTimeout(func,100,event);
  };
}

Можно использовать так:

window.addEventListener("resize",debounce(function(e){
  alert("end of resizing");
}));
17
Jonas Wilms 27 Авг 2017 в 12:59

Мне нравится Jonas Wilms изящная маленькая функция debounce, однако я думаю, что было бы лучше пропустить время debounce в качестве параметра ,

// Debounce
function debounce(func, time){
    var time = time || 100; // 100 by default if no param
    var timer;
    return function(event){
        if(timer) clearTimeout(timer);
        timer = setTimeout(func, time, event);
    };
}

// Function with stuff to execute
function resizeContent() {
    // Do loads of stuff once window has resized
    console.log('resized');
}

// Eventlistener
window.addEventListener("resize", debounce( resizeContent, 150 ));
2
Anas 10 Сен 2018 в 11:25

Используйте window.addEventListener("resize", calculateDimensions);

calculateDimensions() означает, что вы выполняете функцию, а затем используете этот результат в качестве функции обратного вызова.

-3
Michael Schmidt 27 Авг 2017 в 12:59