繁体   English   中英

setInterval仅触发一次

[英]setInterval firing only once

我知道这似乎是重复的,但事实并非如此。 我正在尝试使用OOP方法创建一个简单的Slider。 所以这是到目前为止我得到的:

function Slider(){
    this.totalSlides = 3;
    this.sliderImagesRoot = 'images/slider/';
    this.imagesLinks = [this.sliderImagesRoot + '1.png',this.sliderImagesRoot + '2.png',this.sliderImagesRoot + '3.png'];
    this.titles = ['State of the Art', 'Best staff kk', 'Toratos'];
    this.descriptions = ['First description, bla bla bla', 'werewr','Toraki']; 
    this.slideDelay = 1200;
    this.currSlide = 1;

    this.initSlider = function(){
        var createSlide = this.createSlide();
        var sliding = setInterval(function(createSlide){
            createSlide();
        }, 500);

    }

    this.createSlide = function(){
            alert("er");  
    }
}

我认为这与传递给函数有关,有什么想法吗? 这是我第一次尝试在JS中实现OOP。

您无需为对象(代码中的initSlider )创建单独的构造函数方法,而Slider本身就是构造函数。 尝试这样的事情:

function Slider(){
    this.totalSlides = 3;
    this.sliderImagesRoot = 'images/slider/';
    this.imagesLinks = [this.sliderImagesRoot + '1.png',this.sliderImagesRoot + '2.png',this.sliderImagesRoot + '3.png'];
    this.titles = ['State of the Art', 'Best staff kk', 'Toratos'];
    this.descriptions = ['First description, bla bla bla', 'werewr','Toraki']; 
    this.slideDelay = 1200;
    this.currSlide = 1;

    var createSlide = function(){
            alert("er");  
    }
    var sliding = setInterval(function(){
        createSlide();
    }, 500);


}

然后可以像这样构造对象:

var slider = new Slider();

redneb的答案应该是您需要进行的工作,但是我想指出一些可能有所帮助的内容。 与其使用多个单独的列表( linkstitlesdescriptions )和一个独立的计数器(它们都需要同步)来代替,不如将数据存储在这样一个简单的结构中会更清洁:

var slides = [
    {linK: '1.png', title: 'State of the Art', desc: 'First description,...'},
    {link: '2.png', title: 'Best staff kk',    desc: 'werewr'},
    {link: '3.png', title: 'Toratos',          desc: 'Toraki'}
];

然后你就可以得到totalSlidesslides.length ,当你去使用link属性,可以在前面加上sliderImagesRoot

setInterval回调被按预期方式调用-但是,在回调内部,您试图调用作为参数传递的函数,并且没有传递任何东西,因此它将是未定义的。

如果运行代码,则应该看到错误消息:

TypeError: createSlide is not a function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM