为什么setInterval似乎在我的jQuery插件中有范围问题?

时间:2011-05-25 19:20:04

标签: javascript jquery jquery-plugins

对不起,这不是更具体,但我无法隔离问题。

我写了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);

那么为什么这个插件的单个实例再次滚动不再被初始化?

1 个答案:

答案 0 :(得分:2)

我认为如果您将$wrapper = $this.find('.wrapper');更改为var $wrapper = $this.find('.wrapper');,则可能会有效。

前几天从Stack Overflow中了解到这一点:不使用var关键字的变量在范围内是隐式全局的,所以我认为每个滚动条都覆盖了相同的全局$wrapper变量。

编辑:可能还想var $this = $(this);