javascript - 使用 setTimeout 函数。和随机函数。为类元素添加动画

标签 javascript jquery arrays jquery-animate settimeout

我的调试技巧并不能帮助我弄清楚我在这里做错了什么。

我希望数组中的每个元素在使用 setTimeout 函数指定的时间后进行动画处理。

我没有收到任何错误,并且循环似乎运行得很好,但是,数组中的任何元素最终都没有从原来的位置移动到新位置。

function publicity()
{
// placing elements with class name 'cCameras' inside an array
var eCamerasArray = $(".cCameras").toArray();
// creating 2 arrays to hold left & top values of each element
var iLeftPosArray = [];
var iTopPosArray = [];
// loop to run through each element in array
for( var i = 0; i < eCamerasArray.length; i++)
{
    // timer variable set for each element to be used in setTimeout func.
    var timer = Math.floor (Math.random()*300) + 100;
    // setTimeout func. used to animate each element after a specified (timer) time
    window.setTimeout (function ()
    {
        iLeftPosArray[i] = Math.floor (Math.random() *139) + 360;
        iTopPosArray[i] = Math.floor (Math.random() *160) + 100 ;
        $(eCamerasArray[i]).animate ({left: iLeftPosArray[i] + "px", top: iTopPosArray[i] + "px"}, 100, "linear");
        return [iLeftPosArray[i], iTopPosArray[i]];
    }, timer);
}
}

最佳答案

您可以通过创建闭包来修复它:

(function publicity() {
    var eCamerasArray = $(".cCameras"),
        iLeftPosArray = [],
        iTopPosArray = [],
        timer;
    for(var i = 0; i < eCamerasArray.length; i += 1) {
        timer = Math.floor (Math.random() * 300) + 100;
        (function (i) {
            window.setTimeout (function () {
                iLeftPosArray[i] = Math.floor (Math.random() * 139) + 360;
                iTopPosArray[i] = Math.floor (Math.random() * 160) + 100 ;
                $(eCamerasArray[i]).animate ({left: iLeftPosArray[i] + "px", top: iTopPosArray[i] + "px"}, 300, "linear");
                return [iLeftPosArray[i], iTopPosArray[i]];
            }, timer);
        }(i));
    }
}());

您可以在这里看到效果:http://jsfiddle.net/zHUAt/2/

最诚挚的问候!

关于javascript - 使用 setTimeout 函数。和随机函数。为类元素添加动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8901196/

相关文章:

javascript - ES6 功能模块

javascript - 对多个 JavaScript 数组进行排序

php - 在 PHP 中将数组转换为一行

javascript - 为什么在第一个 Promise 解析之后执行链式 Promise 后排队的微任务而忽略链式 Promise?

javascript - firebase.database() 不是函数 - 新的 Firebase 项目

javascript - 我的 WP 应用程序具有不受我控制的外部依赖项,我该如何解决问题而不重新提交到市场?

javascript - 如何使用 JQuery 选择一个元素并修改它的内容?

javascript - 使滚动条出现在滚动条轨道的悬停上

javascript - 为两个 iframe 创建通用滚动条

java - 如何比较两个java数组的前n个字节?