Как узнать выполняется ли функция? и если да, то больше ее не запускать

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

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

→ Ссылка