Я работаю над вкладками пользовательского интерфейса, созданными с использованием jQuery. Все работает, кроме одной проблемы - я сделал setInterval, который запускает функцию, которая запускает триггер («щелчок»), чтобы он переходил на следующую вкладку через 5000 миллисекунд. Он хорошо проходит по каждой вкладке, проблема в том, что если пользователь вручную нажимает на вкладку, таймер для setInterval не перезапускается обратно в 0. Например, если пользователь должен был начать с tab1 в 0 миллисекунд и нажимает на tab2 в 2000 миллисекунд, setInterval не возвращается к 0, он начнется в 2000 и будет длиться 5000 миллисекунд и впоследствии перейдет на tab3. Я понимаю, почему это происходит, мне просто интересно, был ли способ перезапустить синхронизацию setInterval без необходимости делать clearInterval () и создавать совершенно новый setInterval (). Любое понимание будет оценено.
Обновление
Спасибо за ответы. Причина, по которой я пытался избежать использования clearInterval, заключалась в том, что у меня были проблемы с тем, как написать код таким образом, чтобы clearInterval полностью остановил setInterval. Код настроен для отслеживания, когда пользователь нажимает на вкладку. Проблема в том, что функция автоматического изменения использует триггер («щелчок»), поэтому она запускает функцию clearInterval, которую я написал также при автоматическом изменении вкладок. Кажется, что он работает довольно хорошо сам по себе, но как только пользователь начинает нажимать на вкладки, setInterval ведет себя необычно и непредсказуемо переключает вкладки. Я подозреваю, что происходит то, что несколько setIntervals работают одновременно ... Вот код (Если вы еще не догадались, я довольно новичок в 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);
//});
}