我有下面的代码,但我无法调用 nextPromo,因为它不是一个函数。我怎样才能做到这一点?我正在尝试使用面向对象的风格设置旋转器。我是新手所以我很困惑。我尝试了很多东西,但我就是不知道,我对此感到非常沮丧,请帮助
function promoSlides(s){
this.index = 0;
this.prevIndex = 0;
this.currentVeh = "";
this.t;
this.slides = s;
this.len = this.slides.length;
this.sortWeight = function(){
($('body').hasClass('en')) ? this.slides.sort(SortByWeight) : this.slides.sort(SortByWeightFr);
};
function SortByWeight(a,b) { return b.weight - a.weight; }
function SortByWeightFr(a,b) { return a.frWeight - b.frWeight; }
this.startTimer = function(){ this.t = setTimeout("this.nextPromo()", 3000); }
this.nextPromo = function(){
if(this.index > 0 || this.prevIndex > 0) $(this.slides[this.prevIndex].el).css("display","none");
$(this.slides[this.index].el).css("display","block");
this.prevIndex = this.index;
this.index = (this.index < this.len-1) ? this.index+1 : 0;
this.startTimer();
}
return true;
} ;
您正在为
this.nextPromo
分配一个函数,因此调用 this.nextPromo();
应该可以工作。
实际上,
nextPromo
是一个函数。你可以这样称呼它:
this.nextPromo();
或者,如果这不起作用,您可以像普通函数一样调用它:
nextPromo();
参见 this jsFiddle 了解此类函数的示例。
希望这有帮助。
编辑:这是我测试过的一个简化示例。这使用 setInterval 定期推进幻灯片索引。 “下一个”功能包含在匿名函数中。
function promoSlides(s) {
this.startTimer = function () {
setInterval(
function () {
alert("called");
// if (this.index > 0 || this.prevIndex > 0) {
// $(this.slides[this.prevIndex].el).css("display", "none");
// }
// $(this.slides[this.index].el).css("display", "block");
// this.prevIndex = this.index;
// this.index = (this.index < this.len - 1) ? this.index + 1 : 0;
}, 3000
);
}
return true;
};
var p = new promoSlides(null);
p.startTimer();