使用javascript在settimeout中的img上添加类

时间:2017-07-13 12:15:53

标签: javascript html arrays for-loop settimeout

我有这个for循环,我正在创建一堆图像用作" emoji-rain"

var icons = ['balloon', 
             'clapping-hands-light-skin-tone', 
             'clapping-hands-medium-skin-tone', 
             'crazy-face', 
             'face-blowing-a-kiss', 
             'grinning-face-with-smiling-eyes', 
             'heart-suit',
             'money-bag',
             'man-dancing',
             'money-mouth-face',
             'money-with-wings',
             'party-popper',
             'victory-hand-light-skin-tone',
             'victory-hand-medium-dark-skin-tone',
             'woman-dancing'];

         for(i = 0; i < icons.length; i++) {

            left = (Math.random() * (document.querySelector('#site').offsetWidth) - 75);
            top = parseInt(Math.random() * (i * 125));

            img = document.createElement("img");
            img.src = 'src/public/icons/rain/'+ icons[i] +'.svg';
            img.style.left = left +'px';
            img.style.top = top +'px';
            img.style.position = 'absolute';

            rainElement.appendChild(img);
    }

我想要的是添加课程&#34; fall&#34;使用setTimeout,以便图标在不同时间开始下降。

我有这个

(function(i) { 

   setTimeout(function() {

   img.addClass('fall');

  }, i*750);
 })(i);
}

但这会增加&#34;跌倒&#34;只到最后一个元素。我无法弄清楚如何在所有图片上做到这一点。

1 个答案:

答案 0 :(得分:1)

我不会将import org.apache.commons.io.FileUtils; boolean filesEqual = FileUtils.contentEquals(new File('/path/to/file1'), new File('/path/to/file2')) if (!filesEqual) { AssertionResult.setFailure(true) AssertionResult.setFailureMessage('Files are not equal'); } 放在循环中,而是创建一个外部函数,例如:

setTimeout

并在循环中:

function fall(i) {
  return function(){
    setTimeout(function(){ 
        img.addClass('fall');
    }, i * 750);
  }
}

匿名异步函数(在本例中为setTimeout)将fall(i)(); 的值绑定到函数外部的同一变量,然后您将该类仅添加到循环的最后一个元素。你想要的是将它绑定到一个不会在循环中改变的值,这是一种方法。