Перезапуск setInterval () в Javascript / jQuery (без clearInterval)

Я работаю над вкладками пользовательского интерфейса, созданными с помощью jQuery . Все работает, за исключением одной проблемы - я сделал setInterval, который запускает функцию, которая запускает триггер ("щелчок"), чтобы перейти к следующей вкладке через 5000 миллисекунд. Он проходит через каждую вкладку нормально, проблема в том, что если пользователь вручную щелкает вкладку, таймер для setInterval не перезапускается обратно с 0. Например, если пользователь должен был начать с tab1 в 0 миллисекунд и щелкнуть по tab2 в 2000 миллисекунд, setInterval не будет ' t вернуться к 0, он начнется с 2000 и продолжится до 5000 миллисекунд, а затем перейдет к tab3. Я понимаю, почему это происходит, мне просто интересно, есть ли способ перезапустить время setInterval без необходимости делать clearInterval () и создавать совершенно новый setInterval (). Приветствуется любое понимание.

Обновление

Спасибо за ответы - я пытался избежать использования clearInterval, потому что у меня возникли проблемы с написанием кода таким образом, чтобы clearInterval полностью остановил setInterval . Код настроен для отслеживания, когда пользователь щелкнул вкладку. Проблема в том, что функция автоматического изменения использует триггер («щелчок»), поэтому он запускает функцию clearInterval, которую я написал также при автоматическом изменении вкладок. Кажется, что он работает довольно хорошо сам по себе, но как только пользователь начинает нажимать на вкладки, setInterval ведет себя необычно и переключает вкладки непредсказуемо. Я подозреваю, что происходит то, что несколько setInterval работают одновременно ... Вот код (если вы еще не догадались, я новичок в javascript / jquery). Я закомментировал части, чтобы он работал, но он по-прежнему работает не так, как я предполагал (из первого сообщения).

// auto change tabs
            if( options.interval ) {

                function timerCom() {
                    if( !$(".controller").hasClass('paused') ) {
                        var i = $(".tab-current > a").attr("rel");
                        //alert(i);
                        if( i == 3 ) {i = 0};
                        $container
                            .find('a')
                            .eq(i)
                            .trigger('click');
                    }    
                }

                //$("#promo-items > li > a").click(function () {
                    //var timer;
                    //if( timer != null ) {clearInterval(timer);}
                    timer = setInterval(timerCom, options.interval);

                //});

            }
7
задан Tim Post 23 February 2011 в 14:22
поделиться