interval 属性包含一个setInterval()函数,在对象文字滑块中,在interval中定义的setInterval()正在调用自身,或者至少看起来像是的,但为什么呢?
var slider = {
config : function(imgs, callback){
//mandatory
var images = $(imgs);
//optional
var animationInterval;
var animationTime;
callback(images);
},
target : 0,
get lastElem(){
return this.images.length-1;
},
interval : setInterval(function () {
setSlider();
}, 3000)
};
slider.config('ul.images li', setConfig);
slider.images.hide().first().show();
function setConfig(imgs){
slider.images = imgs;
}
function setSlider(dest) {
slider.target === slider.lastElem ? slider.target = 0 : slider.target++;
slider.images.hide().eq(slider.target).fadeIn(1000);
slider.triggers.removeClass('active').eq(slider.target).addClass('active');
}
的 JSFiddle
答案 0 :(得分:4)
当您创建对象文字时,您键入的值将被计算为表达式。
function square(x) {
return x * x;
}
var lookup = {
'two': square(2)
};
console.log(lookup['two']); // 4
在此,您需要拨打setInterval
而不是square
。 setInterval
采用函数和句点并安排该函数重复运行。它返回调度的数字标识符,以便您稍后可以使用clearInterval
将其停止。例如,您可以稍后执行clearInterval(slider.interval);
以停止调用setSlider。
答案 1 :(得分:1)
在当前代码中,您将setInterval()
的结果分配给interval属性。我建议将setInterval()
调用包装在一个函数中,如下所示:
interval : function() {
setInterval(function() {
setSlider();
}, 3000);
}
然后,您应该可以致电slider.interval()