我正在为我的网站编写简单的滑块。该滑块包含列表项目。我想使用OOP方法。类中的JavaScript/jQuery变量范围(this)
我的实际代码:
var miniSlider = function(objId)
{
this.obj = $("#" + objId);
this.obj.settings = [];
this.obj.settings['items'] = $('ul li', this.obj).length;
this.pagerNext = this.obj.find("i.next");
this.pagerPrev = this.obj.find("i.prev");
this.pagerNext.on("click", function() {
alert(this.obj.settings['items']);
});
};
我可以调用其他几个滑块(是的,这就是为什么我介绍了一个类):
miniSlider("mini-slider");
的问题是,当我在jQuery的this.pagerNext.on(“click”,function(){}); 这个不再是我的对象,而是 - 它成为一个点击元素。点击完成的方式(并支持多滑块)后,如何访问this.obj.settings?
编辑:
这里是与SOF社区:)
var MiniSlider = function(objId)
{
this.obj = $("#" + objId);
this.obj.settings = {
items: $("ul li", this.obj).length,
autoChangeTime: 8000
};
this.obj.activeElement = null;
this.pagerNext = this.obj.find("i.next");
this.pagerPrev = this.obj.find("i.prev");
var self = this;
this.pagerNext.on("click", function() {
self.obj.activeElement = $('li.active', self.obj);
if(self.obj.settings.items > 0)
{
if(self.obj.activeElement.is(':last-child'))
{
$('li.active', self.obj).removeClass('active');
$('li', self.obj).first().addClass('active');
}
else
{
self.obj.activeElement.next().addClass('active').prev().removeClass('active');
}
}
});
this.pagerPrev.on("click", function()
{
self.obj.activeElement = $('li.active', self.obj);
if(self.obj.settings.items > 0)
{
if(self.obj.activeElement.is(':first-child'))
{
self.obj.activeElement.removeClass('active');
$('li', self.obj).last().addClass('active');
}
else
{
self.obj.activeElement.prev().addClass('active').next().removeClass('active');
}
}
});
this.obj.parent().on('mouseenter mouseleave', function(e) {
if (e.type == 'mouseenter')
{
$(this).addClass('stop');
}
else
{
$(this).removeClass('stop');
}
});
setInterval(function() {
if(self.obj.settings.items > 0 && !self.obj.parent().hasClass("stop"))
{
self.pagerNext.click();
}
}, this.obj.settings.autoChangeTime);
};
,并调用了合作创造了一个全码:
new MiniSlider("mini-slider");
与您的问题没有直接关系,但是如果您打算实例化多个这些家伙,您应该使用'new'关键字,如在新的MiniSlider(“mini-slider1”)中;此外,如果您使用它,请使用m大写字母来指示此函数应该用作构造函数。 – Hoffmann