Javascript setTimeout 不会触发延迟

标签 javascript settimeout

我对 javascript 非常陌生,并且遇到了一些奇怪的问题。 我正在尝试淡出图像,请注意,此代码尚未完成。据我所知,这应该可行。但没有。这是代码。

function changeimg() {
  var allElements = document.getElementsByClassName('picture');
  console.log(allElements.length);
  for (var i = 0; i<allElements.length;i++) {
    var opac = window.getComputedStyle(allElements[i]).opacity; 
    if (opac > 0.2) {
      fadeout(allElements[i]);
      break;
    }
  }
}

function fadeout(element) {
  console.log("reduce opacity");
  var opac2 = window.getComputedStyle(element).opacity; 
  element.style.opacity = opac2 - 0.05;
  if(opac2 > 0.2) {
    setTimeout(fadeout(element), 100);
  }     
}

这是为了找到现在可见的图像,并将其淡出。这有效,但它会立即发生。无论我给 setTimout() 方法赋予什么值,它都不会使用它,并且几乎立即完成它。

我在互联网上环顾四周,似乎我需要丢失 fadeout() 方法上的 () 。但是我怎样才能给淡出方法淡出的元素呢?

提前致谢

最佳答案

您将 undefined 传递给 setTimeout,它需要一个函数。这就是您体验这种行为的原因。你需要传递一个函数,阅读更多 here 。下面的固定代码应该有所帮助。

function changeimg() {
  var allElements = document.getElementsByClassName('picture');
  console.log(allElements.length);
  for (var i = 0; i<allElements.length;i++) {
    var opac = window.getComputedStyle(allElements[i]).opacity; 
    if (opac > 0.2) {
      fadeout(allElements[i]);
      break;
    }
  }
}

function fadeout(element) {
  console.log("reduce opacity");
  var opac2 = window.getComputedStyle(element).opacity; 
  element.style.opacity = opac2 - 0.05;
  if(opac2 > 0.2) {
    setTimeout(function() {fadeout(element);), 100);
  }     
}

关于Javascript setTimeout 不会触发延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26107813/

相关文章:

javascript - 动态改变 Angular 的 $interval 延迟

javascript - 在 Mocha 中正常工作测试所需的 setTimeout 包装

javascript - 关于JavaScript函数的两个问题

javascript - 为什么我的 indexedDB.open.onsuccess 事件没有被调用?

javascript - Firefox 中存在多个问题,但 Chrome 中可以正常工作,没有任何问题

javascript - Jquery 悬停选择不起作用

javascript - 将 .className 添加到对象不起作用

javascript - Firefox 中的大子字符串比 Chrome 快约 9000 倍 : why?

javascript - 暂停一个程序一段时间

JavaScript - 减慢循环速度