如何在for-in遍历出对象,已对象作为参数每隔一段时间执行函数?

页面上有多个轮播,需要获取用户设置的值来调整轮播效果,轮播间隔时间是相同的,需要处理延时时间来不同步切换,
想到用定时器来控制轮播的初始化。
function swiperInit(option,time){

             console.log(option);
                for(var key in option){
                    setTimeout(function(){
                        new Swiper(key, {
                            direction: 'horizontal',
                            loop: true,
                            autoplay: time,
                            speed: 2000,
                            effect: option[key],
                        });
                    },500);
                }
         }

swiperInit(option,advertTime);

阅读 2.4k
4 个回答

感觉就是个闭包的问题,你试试下面的代码:

function swiperInit(option,time){
    console.log(option);
    var i = 0
    for(var key in option) {
        setTimeout((function(key){
            return function() {
                new Swiper(key, {
                    direction: 'horizontal',
                    loop: true,
                    autoplay: time,
                    speed: 2000,
                    effect: option[key],
                });
            }
        })(key),500 * i++);
    }
}
swiperInit(option,advertTime);

中间这段改成:

for (var key in option) {
    !(function(key) {
            setTimeout(function() {
                    new Swiper(key, {
                        direction: 'horizontal',
                        loop: true,
                        autoplay: time,
                        speed: 2000,
                        effect: option[key],
                    })
                }
            }, 500);
    })(key)
}

我最近写的项目跟你也挺类似的,你把定时器去掉,把ajax换成同步,看看能不能减少你的困难度

闭包问题 在 for里面写一个匿名函数就可以了

for(var currentKey in obj){
    (function (key) {
        setTimeout(function () {
            new Swiper(key, {
                direction: 'horizontal',
                loop: true,
                autoplay: time,
                speed: 2000,
                effect: option[key],
            })
        }, 500);
    })(currentKey);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题