我试图在页面上创建滑块的多个实例。每个滑块应该知道它当前正在查看哪个幻灯片。看起来,当我更新slide
属性时,我将其更改为类,而不是实例。这表明我没有在我的公开init()
函数中正确实例化。我哪里错了?实例化JavaScript模块模式
var MySlider = (function() {
'use strict';
var animating = 0,
slides = 0, // total slides
slider = null,
slide = 0, // current slide
left = 0;
function slideNext(e) {
if ((slide === slides - 1) || animating) return;
var slider = e.target.parentNode.children[0],
x = parseFloat(slider.style.left);
animate(slider, "left", "px", x, x - 960, 800);
slide++;
}
return {
init: function() {
var sliders = document.querySelectorAll('.my-slider'),
l = sliders.length;
for (var i = 0; i < l; i++) {
sliders[i] = MySlider; // I don't think this is correct.
slider = sliders[i];
buildSlider(slider);
}
}
}
})();
我不明白这种创建方法的目的,除了增加无用的复杂性和错误来源。有人能够启发我吗? – Virus721 2013-04-24 14:26:41
你的“我不认为这是正确的”路线很好评估。您将同一个对象附加到每个滑块。我的倾向是将其反转,并使MySlider成为一个构造函数,它需要一个参数(单个滑块元素)来操作。为每个滑块元素创建一个新的MySlider。 – underrun 2013-04-24 14:28:09
@underrun你能告诉我如何?这个想法是,当有人实现这个模块时,他们可以调用MySlider.init();一旦他们的DOM已经加载,我的函数将遍历页面上的匹配元素并为每个元素创建一个实例。我不希望他们必须手动创建实例。 – 2013-04-24 14:31:04