@megamutex

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

Добрый день. Есть функция, которая постоянно мониторит изменение ширины браузера. Если достигается <= определенной ширины, выполняется функция, а точнее создается слайдер. Проблема в том, что эта функция вызывается постоянно при уменьшении браузера.
Как можно ограничить кол-во выполнений функции до одного раза?
  • Вопрос задан
  • 26564 просмотра
Решения вопроса 1
@chirskiy_mixail
Очень давно занимаюсь версткой, имею огромный опыт
Например задать переменную, и изменить ее при 1 достижении

var isResizeble = false;

if(!isResizeble) {
 // Ваша ф-ция которая что то делает, отработает 1 раз и все

isRezeble = true;
}


Надеюсь смысл ясен, иными словами установить флаг и проверять
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
adrin13
@adrin13
front-end
Автор видимо имел ввиду типичный случай, когда не вообще нужно только один раз использовать функцию при ресайзе, а когда эта функция должна отработать единожды при серии ресайзов, т.е при окончании грубо говоря этого события (потому как при ресайзе или скролле это события возникает в каждую единицу времени). Ну и повторно так же отрабатывать единожды при возобновлениии новой серии ресайзов.
Потому как то, что написали вверху, сработает один раз и все на этом. На примере смена ориентации на мобильных, один раз при повороте отработает, при повторном повороте в обратное положение уже нет.
Пример ниже, будет срабатывать идиножды всегда, в промежутке паузы заданном (500) аргументом
var waitForFinalEvent = (function () {
  var timers = {};
  return function (callback, ms, uniqueId) {
    if (!uniqueId) {
      uniqueId = "Don't call this twice without a uniqueId";
    }
    if (timers[uniqueId]) {
      clearTimeout (timers[uniqueId]);
    }
    timers[uniqueId] = setTimeout(callback, ms);
  };
})();
$(window).resize(function () {
    waitForFinalEvent(function(){
      alert('Resize...');
      //...
    }, 500, "some unique string");
});

Источник: https://stackoverflow.com/questions/2854407/javasc...

Или как-то так
var isEvent = false;
$( window ).on( 'resize', function() {
    if ( !isEvent ) {
        // this my code
        isEvent = true;
        setTimeout( function() {
            isEvent = false;
        }, 1000 );
    }
} )
Ответ написан
@sergyx
отсюда
function once(fn, context) { 
    var result;

    return function() { 
        if(fn) {
            result = fn.apply(context || this, arguments);
            fn = null;
        }

        return result;
    };
}

// Пример использования
var canOnlyFireOnce = once(function() {
    console.log('Запущено!');
});

canOnlyFireOnce(); // "Запущено!"
canOnlyFireOnce(); // Не запущено
Ответ написан
вставить в нее счетчик? и вызывать ее по условию этого счетчика... как вариант.
Ответ написан
AngReload
@AngReload
Кратко о себе
var sliderAdded = false;
$(window).resize(function(){
  if (!sliderAdded && $(window).width() <= 1024px) {
    addSlider();
    sliderAdded = true;
  }
}
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы