在第一个函数完成之前启动第二个函数,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
。