Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在第一个函数完成之前启动第二个函数,Javascript_Javascript - Fatal编程技术网

在第一个函数完成之前启动第二个函数,Javascript

在第一个函数完成之前启动第二个函数,Javascript,javascript,Javascript,在这两个大的if之外,我有一个for循环。我的问题似乎是第二个函数似乎在短时间内启动。是否应该先完成第一个功能,然后再运行第二个功能 我不明白为什么在第一次启动完成之前第二次启动。当第二个函数也启动时,它会将原始数从0增加到60 if(activeSlideBoolean && activeSlide < i){ step = 0; div[activeSlide].className = 'slide left'; animateHalfLeft

在这两个大的
if
之外,我有一个for循环。我的问题似乎是第二个函数似乎在短时间内启动。是否应该先完成第一个功能,然后再运行第二个功能

我不明白为什么在第一次启动完成之前第二次启动。当第二个函数也启动时,它会将原始数从0增加到60

if(activeSlideBoolean && activeSlide < i){
    step = 0;
    div[activeSlide].className = 'slide left';

    animateHalfLeft(activeSlide);

    function animateHalfLeft(activeSlide){
        if(step < -60){
            return; 
        }

        div[activeSlide].style.left = step+'em';
        step -= 6;


        setTimeout (function(){ animateHalfLeft(activeSlide);},100);


    }

    activeSlideBoolean = false;

}
if((activeSlideBoolean === false) && (RestOfSlides)){
    step = 60;
    animateTotalLeft(RestOfSlides);

    function animateTotalLeft(RestOfSlides){
        f(step < -60){
            return; 
        }

        div[RestOfSlides].style.left = step+'em';
        step -= 6;
        setTimeout (function(){ animateTotalLeft(RestOfSlides);},100);  

    }

}
if(ActiveSlideBolean&&activeSlide
除了参数activeSlide和RestOfSlides之外,函数AnimateHalfleet和animateTotalLeft完全相同

我建议首先创建一个单独的函数:

function animateToLeft(whatToSlide){
        if(step < -60){
            return; 
        }

        div[whatToSlide].style.left = step+'em';
        step -= 6;
        setTimeout (function(){ animateToLeft(whatToSlide);},100);  

    }
}
函数animateToLeft(whatToSlide){
如果(步骤<-60){
返回;
}
div[whatToSlide].style.left=step+'em';
步骤-=6;
setTimeout(函数(){animateToLeft(whattosiled);},100);
}
}
但函数仍在setTimeout结束(甚至开始)之前完成

Javascript是一种函数式语言。使用它:

function animateToLeft(whatToSlide, step, callback){
        if(step < -60){
            if (typeof callback === 'function') {
                callback();
            }
            return; 
        }

        div[whatToSlide].style.left = step+'em';
        step -= 6;
        setTimeout (function(){ 
            animateToLeft(whatToSlide , step, callback);
        },100);  
    }
}

if(activeSlideBoolean && activeSlide < i){
    var isStarted = false;
    animateToLeft(activeSlide, 0, function() {
        if (isStarted) {
            return;
        }
        isStarted = true;

        if (RestOfSlides) {
            animateToLeft(RestOfSlides, 60, null);
            // Finishing order 3
        }
    }); 
    // Finishing order 1
}

if(activeSlideBoolean === false && RestOfSlides){
    animateToLeft(RestOfSlides, 60, null);
    // finishing order 2
}
函数animateToLeft(whatToSlide、step、回调){
如果(步骤<-60){
if(回调类型==='function'){
回调();
}
返回;
}
div[whatToSlide].style.left=step+'em';
步骤-=6;
setTimeout(函数(){
animateToLeft(whatToSlide、step、callback);
},100);  
}
}
如果(ActiveSlideBolean&&activeSlide

我不知道它是否适合你(不要愚蠢地复制/粘贴),但对我来说,这是一个好的开始

为什么要在条件中声明函数?而
f(步骤<-60)
mean是什么?我有条件之外的动态变量,我不知道如何在主函数(div[1],div[2])等“动态变量”之外的函数中获取它们?它们不总是动态的吗?您可能应该阅读一些关于参数和声明函数的内容,这里没有显示它们,因为我认为它们不是问题所在,而是如何在第一个函数完成之前阻止第二个函数启动“当第二个函数启动时,它会将原始数从零增加到60。”不,不是<代码>步骤
在第二个
if
语句中立即设置为
60
。如果在
animatehalfleet
之前执行
语句,则该
将被第二次调用,因为您使用的是
setTimeout