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

Как замедлить цикл JS?

Мне нужно написать сортировку пузырьком, но сделать так что бы это было плавно, а не в один момент происходило. Для этого, как мне кажется, нужно замедлить циклы, но как это сделать ума не приложу, хотя если есть варианты без замедления цикла, буду рад услышать!
  • Вопрос задан
  • 3959 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
27cm
@27cm
TODO: Написать статус
Примеры:
codepen.io/LeonGr/pen/hyvfA
codepen.io/Rad1calDreamer/pen/vOJgRd
codepen.io/mbielanczuk/pen/votiD

Код придётся, скорее всего переписать, потому что в JavaScript нельзя просто написать что-то вроде:
for (var i = 0; i < n; i++) {
    sleep(1000);
}


Вместо цикла придётся рекурсивно вызывать функцию через заданные промежутки:
function sort (i, j) {
    // ...
    setTimeout(function(){
        sort(i + 1, j + 1);
    }, 1000);
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
pm_wanderer
@pm_wanderer
junior-HTML
попробуй выполнить цикл через setTimeout()
Ответ написан
Комментировать
ruFelix
@ruFelix
Предсказание будущего по руке, таро, кофе.
Странная задача, но тем не менее, замедляться в JS можно только через setTimeout
Ответ написан
Ты можешь использовать генераторы, очень хорошая штука для JS.
Допустим у тебя есть цикл который делает итерацию переменной:
function* foo(){
  var index = 0;
  while(index <= 2)
    yield index++; // yield будет прерывать работу функции на этом месте
}

Вот так это вызывается
var iterator = foo();
console.log(iterator.next()); // { index:0 }
console.log(iterator.next()); // { index:1 }
console.log(iterator.next()); // { index:2 }

То есть при вызове iterator.next() функция продолжает работать с того места где остановилась.
А вызывать iterator.next() будешь с помощью setTimeout
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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