BodyaFlesh
@BodyaFlesh
Front-End Developers

Как правильно остановить рекурсию?

Помогите пожалуйста, есть написана функция суть ее это сделать эффект текста который набирается. То есть при переключении слайда она принимает 2 фразы одна будет невидимая вторая берется и по одному символу набирается. После того как функция завершится слайд переключается и все по новой. Тот код который я демонстрирую рабочий. Но мне нужно еще как то ее усовершенствовать чтобы можно было досрочно завершать и переключится на второй слайдер. Только что-то мозгами не могу дойти до этого.
Его кривую роботу при переключении можете увидеть здесь.
klucik2016.psdcoding.co/en
function writetext(prev,timeOneC){
    var word = '', pos = '', newWord = '', i = 0, g = 0, sub = '', auto = true;
    sub = $('.topHomeBlock .slider .slick-active .subTitle'); //получаю текст в слайдере
    pos = $('.topHomeBlock .slider .slick-active .title'); //получаю второй текст в слайдере
    pos.addClass('vis');
    word = pos.text();
    pos.text('');          
    timeoutW();       
    //функция которая добавляет по одной букве к слову за один вызов, когда дойдем до конца вторая фраза будет видна
    function timeoutW() {
        if (i < word.length){
            setTimeout(function () {
                i++;
                newWord += word.charAt(i);
                pos.text(newWord);
                timeoutW();
            }, timeOneC); 
        }
        if(i === word.length){
            pos.addClass('blick');
            sub.addClass('vis');
            setTimeout(function () {
                pos.removeClass('blick');
                timeoutR();
            }, timeOneC * 15);
        }
    }    
    //функция которая удаляет по одному символу за вызов
    function timeoutR() {
        setTimeout(function () {
            if (g < word.length){
                g++;
                newWord = word.substring(g);
                pos.text(newWord);
                timeoutR();
            }            
        }, timeOneC/3);
        if(g === word.length && auto){
            if(prev){
                $('.topHomeBlock .slick-prev').click(); //предыдущий слайд
            }else{
                $('.topHomeBlock .slick-next').click(); // следующий слайд
            }
            sub.removeClass('vis'); //убираю класс чтобы текст стал невидим
            pos.text(word).removeClass('vis'); //убираю класс чтобы текст стал невидим
            writetext(false,150); //вызываю функции снова
        }
    }      
}

writetext(false, 150);
  • Вопрос задан
  • 1215 просмотров
Решения вопроса 1
@YemSalat
хранить текущее состояние где-то выше по скоупу. Перед рекурсивным вызовом проверять его, и если что - выходить из рекурсии.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы