javascript - 从函数内调用 setInterval

标签 javascript jquery

我正在制作一个 slider ,但遇到了问题。我正在练习模块化 js ,此代码第一次工作正常,但 setInterval 不会重复自身,因此幻灯片会继续变化。如何让它发挥作用?提前致谢。

var currentSlide = 1;
var slider = {

    init: function(){
        this.cacheDom();
        this.setInt();
    },
    cacheDom: function(){
        this.$panel = $('.slider');
        this.$actPan = this.$panel.find('.panel.active');
    },
    setInt: function(){
        return setInterval(this.mainFunction(), 3000);
    },
    mainFunction: function(){
        this.$actPan.fadeOut(2000, this.showNextPanel());
        this.$panel.find('.tabs li:nth-child('+ currentSlide +')').find('img').attr('src', 'images/g4228.png');
    },
    showNextPanel: function(){
        this.$panel.find('#panel' + currentSlide).removeClass('active');
        this.revert();
    },
    revert: function(){
        currentSlide++;
        if(currentSlide === 4){currentSlide = 1;}
        this.$panel.find('.tabs li:nth-child('+ currentSlide +')').find('img').attr('src', 'images/g4228.png');
        this.$panel.find('#panel' + currentSlide).fadeIn(2000, this.adder());
        },
    adder: function(){
        this.$panel.find('#panel' + currentSlide).addClass('active');
        }
};

slider.init();  

所以,我认为只有 setIntinit 函数需要更改。

最佳答案

问题出在这一行:

return setInterval(this.mainFunction(), 3000);

这是调用 this.mainFunction() 并将结果传递给 setIntervalsetInterval 需要传递一个函数来按时间间隔调用。将其替换为:

return setInterval(this.mainFunction.bind(this), 3000);

需要bind,以便在setInterval 调用它时保留this

关于javascript - 从函数内调用 setInterval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39134700/

相关文章:

javascript - 如何清除从 JQuery.HTML() 检索到的 javascript 对象

javascript - 如何使用 jQuery 验证表单、阻止提交表单并在指定的 div 中显示正确的错误消息?

c# - 在 JS 和 C# 中通过 POST 请求解析 JSON 数据

javascript - 如何检查entry.value并更改它是否包含垃圾字符?

javascript - ionic 警报 - 检查结果是否未定义

javascript - 我可以使用 jQuery 删除内联事件处理程序吗?

javascript - 如何检查并返回数据直到没有匹配项?

javascript - 如何使用区分大小写的elem名称将元素附加到dom

Javascript - 从数组中删除值 - 构造时间数组

javascript - Facebook Connect FB.CommentClient.add_onComment 方法莫名其妙地停止工作