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

Как вызывать функцию при ресайзе окна по одному разу при одном условии?

Добрый вечер!
var f_windowWidth = function (w) {
          if (w <= n) {
              console.log("Window width <= " + n);
          } else {
              console.log("Window width > " + n)
          }
    };
    
    var n = 800, w = window.innerWidth;
    
    f_windowWidth(w);
    $(window).on("resize", function () {
        var w = window.innerWidth;
        f_windowWidth(w); 
    });


Как сделать так, чтобы был вывод функции в консоли по одному разу при смене рубежа в 800 пкс. Т.е., допустим, мы запустили скрипт на 1000px, нам вывелось сообщение о том, что ширина окна больше 800px, а дальше, когда сужаем окно выводится множество сообщений о том, что ширина окна больше 800px, а когда мы перешли рубеж в 800px и продолжаем сужать окно, выводится множество сообщений о том, что ширина окна меньше 800px. В общем, задача такая: избавиться от этих множеств, а выводить сообщение только 1 раз при смене рубежа 800px. Нужно как-то отслеживать предыдыдущую ширину окна?
  • Вопрос задан
  • 860 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
TexxTyRe
@TexxTyRe
Software Developer
var minResize = false;
var maxResize = false;

var f_windowWidth = function (w) {

          if (w <= n && !minResize) {
              minResize = true;   
              maxResize = false;
              console.log("Window width <= " + n);
          } 

          if (w >= n && !maxResize) {
              maxResize = true;
              minResize = false;
              console.log("Window width > " + n);
          }
    };
    
    var n = 800, w = window.innerWidth;
    
    f_windowWidth(w);
    $(window).on("resize", function () {
        var w = window.innerWidth;
        f_windowWidth(w); 
    });
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dimovich85
@dimovich85 Куратор тега JavaScript
https://u-academy.net/
$(function(){
let timer;
let anyTime = 300; // любое время
$(window).on('resize', () => {
if (timer !== undefined){
clearTimeout(timer);
}
else{
timer = setTimeout(() =>{
// все, что надо сделать после ресайза, тут всякие проверки и так далее можно
}, anyTime);
}
});

Суть кода такая, что создаем переменную пустую, когда происходит ресайз окна - ставится таймаут на действие, которое будет выводить сообщение, каждый пиксель будет вызывать функцию, которая обрабатывает ресайз, и внутри функции - проверка, что если таймер уже задан, то его надо обнулить. Это дает нам то, что пока ресайз окна не завершится, никаких сообщений не увидим, а как только ресайз закончится, то отработает самый последний таймаут и после окончания ресайза, через anyTime, например 300мс, увидим сообщение. Таймаут можно ставить любой, просто 300мс не заметит человек, но будет достаточно, чтобы отследить окончание ресайза. Внутри функции в таймауте можно писать любые проверки и код. Такое "отложенное действие" можно запустить после прохождения 800пкс, добавить внутрь обработчика ресайза проверку на ширину окна.
Ответ написан
Ваш ответ на вопрос

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

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