Почему setInterval, кажется, имеет проблемы с областью в моем плагине jQuery? - PullRequest
0 голосов
/ 25 мая 2011

Извините, это не более конкретно, но у меня возникают проблемы с изоляцией проблемы.

Я написал очень простой плагин jQuery , который прокручивает изображения или другиеэлементы через 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 Ответ

2 голосов
/ 25 мая 2011

Я думаю, что если вы измените $wrapper = $this.find('.wrapper'); на var $wrapper = $this.find('.wrapper');, это может сработать.

Узнал об этом на днях из переполнения стека: переменные, которые не используют ключевое слово var, неявно глобальны по своему охватупоэтому я думаю, что каждый скроллер перезаписывает одну и ту же глобальную переменную $wrapper.

РЕДАКТИРОВАТЬ: может также захотеть сделать var $this = $(this);.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...