Как узнать выполняется ли функция? и если да, то больше ее не запускать
Есть блок с анимацией чисел, который запускается когда до него доскролил и больше не запускаться, но выходит так, что он запускается каждый раз, когда я до него до
function playNumber(selector ) {
const number = document.querySelector(selector);
const time = 5000;
const step = 2;
let box = number.getBoundingClientRect();
let isRun = false;
function outNum(num) {
let e = document.querySelector(selector);
let n = 0;
let t = Math.round(time / (num / step));
let interval = setInterval(() => {
n = n + step;
if (n == num) {
clearInterval(interval);
}
e.innerHTML = n;
}, t);
}
window.addEventListener('scroll', () => {
if (window.pageYOffset >= box.top + pageYOffset - document.documentElement.clientHeight + 100) {
outNum(150);
}
}
});
}
playNumber('.numberOne');
<div class="service__info__inner__right__one">
<p class="service__info__inner__right__number"><span class="numberOne">0</span>%</p>
<p class="service__info__inner__right__text">увеличение прибылей при грамотном использовании соцсетей</p>
</div>
скролю. Как можно узнать, запустилась ли функция, и если да, то больше ее не запускать?
Ответы (1 шт):
Автор решения: Кирилл Панишев
→ Ссылка
У вас уже есть флаг isRun, который можно использовать для проверки. Когда функция запуститься просто измените этот флаг.
window.addEventListener('scroll', () => {
if (window.pageYOffset >= box.top + pageYOffset - document.documentElement.clientHeight + 100 && !isRun) {
outNum(150);
isRun = true;
}
}
});
Потом ещё желательно удалить слушателя с помощью removeEventListener