javascript - 使用 javascript 在 settimeout 中为 img 添加类

标签 javascript html arrays for-loop settimeout

我有这个 for 循环,我正在创建一堆图像用作“表情符号雨”

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);
    }

我想要的是使用 setTimeout 添加“fall”类,以便图标在不同时间开始下落。

我有这个

(function(i) { 

   setTimeout(function() {

   img.addClass('fall');

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

但这只会将“fall”添加到最后一个元素。我不知道如何在所有图像上执行此操作。

最佳答案

我不会将 setTimeout 放入循环中,而是创建一个外部函数,例如:

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

并在循环内:

fall(i)();

匿名异步函数(在本例中为 setTimeout)会将 i 的值绑定(bind)到函数外部的同一变量,然后您将只将该类添加到循环的最后一个元素。相反,您想要的是将其绑定(bind)到一个在循环中不会更改的值,这是实现此目的的一种方法。

关于javascript - 使用 javascript 在 settimeout 中为 img 添加类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45080344/

相关文章:

javascript - 如何为 mediaelement.js 创建皮肤?

arrays - 包含整数的数组的排列变体

c++ - 在不知道长度的情况下找到数组的中间

javascript - 初始化一个javascript数组

javascript - 我如何编写脚本,如果找到想要的 .js 文件则显示消息然后执行它?

javascript - 使用 clearInterval 方法可以实现什么,而将区间变量引用设置为 null 却不能实现?

javascript - 将 HTML5 应用程序转换为独立的 Android 应用程序

javascript - 将 Canvas 弧划分为 364 天

javascript - Opera onkeyup 坏了?重复,向下时开火

asp.net - facebook登录后如何在asp.net应用程序中使用javascript SDK获取用户信息