Пытаюсь написать функцию плавной прокрутки на чистом JS. При клике на кнопке происходит прокрутка к элементу "каталог". В какой-то момент получился вот такой вариант:
function scrollToStep(coord = 0, step = 20, temp = 1000) {
if (coord > step) {
setTimeout(function() {
window.scrollBy(0, step);
}, temp);
coord -= step;
console.log(coord);
scrollToStep(coord, step, temp)
} else {
return false;
}
}
buttonChoice.addEventListener('click', function() {
let catalog = document.querySelector('.catalog');
scrollToStep(catalog.getBoundingClientRect().top);
});
Я ждал, что раз в секунду будет выводиться в console промежуток, на который осталось сдвинуть и происходить сдвиг на указанный шаг.
Вместо этого: все промежутки выводятся сразу, а сдвиг происходит скачком через одну секунду.
Отсюда и вопрос: можно ли использовать setTimeout рекурсивно? Если да, прошу подтолкнуть в нужном направлении! Если нет - посоветуйте другой инструмент, пожалуйста!