为什么参数在添加时停止功能

时间:2016-03-07 16:07:53

标签: javascript html fadein

我有一个代码,我试图使用函数中的参数执行,即 -

function startFadeEffect(elem){ };

我已将elem等于全局范围中的变量b,其中b是图像数组。含义 -

var elem = b[imgNumb];

imgNumb是一个全局为“0”的变量,函数内部定义为

imgNumb = imgNumb + count;

现在,我当前的代码“没有”参数完美无缺 -

function startFadeEffect(){
    var opacSetting = noOpac / 10;
    b[imgNumb].style.opacity = opacSetting; 
    b[imgNumb].style.display = "block";
    noOpac++;
    if(noOpac < 0){
        opacSetting = 0;    
    }
    if(opacSetting == 1){
        clearTimeout(timer);
        b[imgNumb].style.opacity = 1;
        noOpac = 0;
        return false;
    }
    var timer = setTimeout(startFadeEffect, 75);
}

然而,当我使用这样的参数时,它对我不起作用:(

function startFadeEffect(elem){
    var opacSetting = noOpac / 10;
    elem.style.opacity = opacSetting;   
    elem.style.display = "block";
    noOpac++;
    if(noOpac < 0){
        opacSetting = 0;    
    }
    if(opacSetting == 1){
        clearTimeout(timer);
        elem.style.opacity = 1;
        noOpac = 0;
        return false;
    }
    var timer = setTimeout(startFadeEffect(elem), 75);
}

请注意我已经在文件的全局范围内定义了elem变量。另外,我只是在寻找一个没有像JQuery这样的库的JS解决方案!感谢

1 个答案:

答案 0 :(得分:2)

这部分不正确:

setTimeout(startFadeEffect(elem), 75);

应该是:

setTimeout(function () {
    startFadeEffect(elem);
}, 75);

setTimeout期望函数作为它的第一个参数。 startFadeEffect(elem)立即执行(并且不返回函数)。所以会发生的是startFadeEffect递归调用自己,直到opacSetting == 1打破递归。