对不起,这不是更具体,但我无法隔离问题。
我写了a very simple jQuery plugin,它按照设定的间隔通过div(如旋转木马)滚动图像或其他元素。我希望这个插件在一个页面上使用多个实例,但是当我在多个元素上调用它时,只有最后一个初始化元素滚动。我假设我使用setInterval的方式是原因,但我不明白为什么。
滚动功能如下,完整的源码链接在上面。
function scrollRight() {
// Don't animate if the mouse is over the scrollah
if (hovering) { return; }
/* If we're at the end, flip back to the first image
* before animating, lest we view blankness in the wrapper
*/
if (position === nChildren) {
position = 0;
$wrapper.css('left', '0px');
}
// Animate to the next view
position++;
$wrapper.animate({
left: position*-width+'px'
}, 1000, 'swing', function() {
// Animation complete.
});
}
setInterval(scrollRight, 5000);
那么为什么这个插件的单个实例再次滚动不再被初始化?
答案 0 :(得分:2)
我认为如果您将$wrapper = $this.find('.wrapper');
更改为var $wrapper = $this.find('.wrapper');
,则可能会有效。
前几天从Stack Overflow中了解到这一点:不使用var
关键字的变量在范围内是隐式全局的,所以我认为每个滚动条都覆盖了相同的全局$wrapper
变量。
编辑:可能还想var $this = $(this);
。