Pull to refresh

Comments 14

Спасибо, очень познавательно.
Underscore/lodash вам в помощь. Для сложных анимация с css transitions есть событие об окончании анимации.
у автора другая задача не «сделать что-то после анимации», а «не дать сделать во время»
Не делают что то во время, делают либо до либо после. Потому что анимация это тяжелая задача, и если вы хотите идеальные 60fps не делайте кучу действий. Да могут быть случаи когда это нужно но случай автора этого явно не требует.

чтобы данные сохранялись после того, как анимация завершится
Лайфхак —
запускаем timeout на «известное время»(например 1/60 сек) и считаем другим, более крупным, таймером сколько раз он успел «тикнуть».
Если >50 — значил Idle state, можно что-то сохранить.
Если <30 — значит busy, нужно подождать.
Я правильно понял, что если у нас будет подряд два раза вызываться дебаунсер с разными колбэками, то первый колбэк не выполнится?
Например:

debounce(1000, loadMorePosts);
debounce(1000, loadMoreComments);


И получается, что в дебаунсере таймаут на чтение постов очистится, и выполнится только обновление комментариев?
Да нет, выполнятся оба. timeout локальная скрытая переменная, для каждого вызова будет свой timeout. Вот если бы было так

var timeout = null;
function debounce(ms, cb){
    return function(){
        if(timeout) clearTimeout(timeout);
        timeout = setTimeout(cb, ms);
    }
}


Тогда да, а так нет.
Я вот только не понял — при чём тут время простоя и фоновые задачи?
Буквально неделю назад писал код обращения к API, нужно было отправлять запрос после N миллисекунд после набора текста, вот моя версия:

timeout_id=setTimeout(function(){},1);
$('#input').keyup(function() {
	$('#list').html('Пожалуйста подождите...');
	clearTimeout(timeout_id);
	timeout_id=setTimeout(getAddress,700);
});

Не знал, что это называется Дебаунсер.
Самое неприятное в процессе написания было в том, что удалить можно только существующий таймер и пришлось создавать пустой.
Можно было просто написать
timeout_id && clearTimeout(timeout_id);
В таком случае clearTimeout будет вызван только если timeout_id == true
Sign up to leave a comment.

Articles