Millerish
@Millerish

JS: как запретить запуск функции подряд?

Доброе время суток!

У меня есть большой строительный калькулятор и есть функция которая его обрабатывает. Я вызываю запуск калькулятора так:

$('*').on('input', function () {
    calcNow();
});


Моя проблема сейчас в том, что при вводе данных или других быстрых действиях, запуск происходит слишком быстро, страница лагает. Мне нужен минимальный интервал, через который может запускаться функция, например секунда.

$('*').on('input', function () {
    function func() {
          calcNow();
    }
    setTimeout(func, 1000);
});


В таком варианте оно не работает, как правильно?
  • Вопрос задан
  • 358 просмотров
Решения вопроса 3
miraage
@miraage
Старый прогер
Почитайте про throttle/debounce.
В Вашем случае - debounce.

https://remysharp.com/2010/07/21/throttling-functi...
https://css-tricks.com/the-difference-between-thro...
Ответ написан
Комментировать
@Faliah
Используйте debounce, чтобы не использовать дополнительных библиотек, можете взять код вот тут
Ответ написан
Комментировать
@Nwton
var calc_active = false;

$('*').on('input', function () {
	if(calc_active == false){
		calc_active = true;
		calcNow();
		setTimeout(function(){
			calc_active = false;
		}, 1000);
	}
});


calcNow будет запускаться не чаще 1 раза в секунду.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Мб
setTimeout(func(), 1000);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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