【问题标题】:I want to create a for loop for following js code. Please help me [duplicate]我想为以下 js 代码创建一个 for 循环。请帮帮我[重复]
【发布时间】:2013-03-04 20:27:01
【问题描述】:
function fade90() { document.getElementById("myDiv").style.opacity="0.90"; setTimeout("fade80()", 100); }
function fade80() { document.getElementById("myDiv").style.opacity="0.80"; setTimeout("fade70()", 100); }
function fade70() { document.getElementById("myDiv").style.opacity="0.70"; setTimeout("fade60()", 100); }
function fade60() { document.getElementById("myDiv").style.opacity="0.60"; setTimeout("fade50()", 100); }
function fade50() { document.getElementById("myDiv").style.opacity="0.50"; setTimeout("fade40()", 100); }
function fade40() { document.getElementById("myDiv").style.opacity="0.40"; setTimeout("fade30()", 100); }
function fade30() { document.getElementById("myDiv").style.opacity="0.30"; setTimeout("fade20()", 100); }
function fade20() { document.getElementById("myDiv").style.opacity="0.20"; setTimeout("fade10()", 100); }
function fade10() { document.getElementById("myDiv").style.opacity="0.10"; setTimeout("hide()", 100); }

我写这个。它是否正确?如果不是,请解决此问题。

function cls_msg(){
for (i=1;i<10;i++)
{
setTimeout(document.getElementById("myDiv").style.opacity=100-(i*10), 100);
}

谢谢

【问题讨论】:

  • 你怎么又发同样的问题了?!

标签: javascript loops for-loop


【解决方案1】:

你可能想要这个:

var elem = document.getElementById("myDiv");
for (i=1;i<10;i++) {
   (function(i){
      setTimeout(
        function(){elem.style.opacity=100-(i*10)},
        (i+1)*100
      );
   })(i);
}

与您的代码不同:

  • 超时不同,因此它们不会同时被调用(代码不会暂停,直到执行下一个超时)
  • i 受闭包保护,因此在触发超时时它没有循环结束的值
  • 传递给setTimeout 的第一个参数是一个函数
  • 根据yabol的建议,缓存元素

【讨论】:

  • document.getElementById("myDiv") 保持在变量循环之外会更好。当然,这只是在#myDiv 元素不会改变的情况下。
  • @yabol 是的,这样更好。这对性能来说并不重要(getElementById 非常快)但这显然是一个好习惯。
  • 是的,我知道它很快,但如果作者想将元素选择更改为更耗时的东西;)
猜你喜欢
  • 2022-01-02
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 2021-06-11
  • 2014-01-15
  • 1970-01-01
相关资源
最近更新 更多