0

我已经搜索并看到大多数有这个问题的人都在传递函数调用而不是函数名称,即:setInterval(myFunc(),100) 而不是 setInterval(myFunc,100)

但我不是,它仍然无法工作......我还看到很多人说你需要在不透明度上 parseFloat 才能让它工作,我已经尝试过了,它仍然会产生相同的结果。 ..

无论我是否包含 if(i.style.opacity==1) 子句,函数 runSubMenu1() 似乎只运行一次

不知道从这里去哪里?建议?

<script type="text/javascript">

var run;
var runOpt;

function openSubMenu1(item) {
    runOpt=item;
    run = setInterval(runSubMenu1,100);

}

function runSubMenu1()  {
    var i=document.getElementById('menu-1-'+runOpt);

    if(i.style.opacity==1){clearInterval(run);}
    else{i.style.opacity+=.1;}


}


</script>

编辑:jfriend00 提到的更改,并且 opacity 的值在与页面一起发送的原始 CSS 中设置为 0,经过 1 次迭代后,不透明度似乎为 0.1

4

1 回答 1

0

您需要解析该值,因为它是一个字符串,否则+= .1失败:

    else { i.style.opacity = parseFloat(i.style.opacity) + .1; }

您正在添加.1".1",这会导致:".1.1"。将此值分配给 opacity 会调用一个数字解析器,因为它是一个数值,但这会失败,因为它不是一个有效的数字,所以它回退到.1. 区间无限循环,但由于它只从 0 移动到 0.1,看起来它只运行了一次。

这是一个jsFiddle来显示结果。

于 2013-10-15T01:09:56.290 回答