我有一个在滚动窗口时运行的函数,它有3个回调,并且在传递不同函数的情况下多次调用,调用它取决于滚动的数量:
var acc = 0;
function whileScrolling(callback1, callback2, callback3){
if(acc > 0 && acc < 100){
callback1();
}
if(acc < 0){
callback2();
}
if(acc > 100){
callback3();
}
}
$(window).scroll(function(){
whileScrolling(func1, func2, func3);
whileScrolling(func4, func5, func6);
whileScrolling(func7, func8, func9);
acc++;
});
Callback1按需要处理,但是2和3只能运行一次(除非再次运行回调1,在这种情况下它们可能会再次运行)。如果我只是在调用它一次,我就可以投入一些全局布尔值并像这样运行它:
var acc = 0;
var outcomeFlag = false;
function whileScrolling(callback1, callback2, callback3){
if(acc > 0 && acc < 100){
callback1();
outcomeFlag = false;
}
if(acc < 0 && outcomeFlag === false){
callback2();
outcomeFlag = true;
}
if(acc > 100 && outcomeFlag === false){
callback3();
outcomeFlag = true;
}
}
$(window).scroll(function(){
whileScrolling(func1, func2, func3);
acc++;
});
然而,'whileScrolling'函数的每次调用都需要有自己的'flags',每次使用全局变量都会非常混乱,因为这样做很多次 - 是否有可能在'whileScrolling'功能?
答案 0 :(得分:0)
我认为使用全局变量没有更好的方法,因为每次调用函数时都会重新声明函数内部变量。但我建议使用对象简单地处理事情:
var outcomeFlag = {};
function whileScrolling(callback1, callback2, callback3){
...
if(acc > 100 && !outcomeFlag[callback2]) {
do your stuff
outcomeFlag[callback2] = true;
}
}
答案 1 :(得分:0)
您可以创建一个返回函数的函数。内部函数可以引用外部函数的参数。我不知道更好的解释方法,所以希望这段代码足够清晰:
function configureWhileScrolling(flag1, flag2, flag3) {
var outcomeFlag = false;
return function (callback1, callback2, callback3){
if(acc > 0 && acc < 100){
callback1();
outcomeFlag = flag1;
}
if(acc < 0 && outcomeFlag === false){
callback2();
outcomeFlag = flag2;
}
if(acc > 100 && outcomeFlag === false){
callback3();
outcomeFlag = flag3;
}
}
}
whileScrollingInstance1 = configureWhileScrolling(false, true, true);
whileScrollingInstance1(callback1, callback2, callback3);