@krinbin

Как ускорить (скликать) таймер обратного отсчета на сайте?

Приветствую.

Имеется простой таймер обратного отсчета, по окончании которого происходит некое действие.
Как сделать так, что б у пользователя была возможность ускорить таймер по клику?
Допустим отсчет 60 сек, кликает по кнопке и списывает 1 сек, так сказать может скликать счетчик :)
Либо каждый клик ускоряет таймер до определенной скорости в 0.5 сек например.

var _Seconds = $('.timer').text(),
int;
int = setInterval(function() { // запускаем интервал
if (_Seconds > 0) {
_Seconds--; // вычитаем 1
$('.timer').text(_Seconds); // выводим получившееся значение в блок
} else {
clearInterval(int); // очищаем интервал, чтобы он не продолжал работу при _Seconds = 0
     $('.div_x').addClass('xxx'); //добавляем класс на элемент 1
     $('.div_y').addClass('yyy'); //добавляем класс на элемент 2
  }
}, 1000);


<div class ="timer">10</div>

Вариант повесить на клик _Seconds--; работает, но при 0 таймер уходит в минусовое значение. Есть подозрение, что не хватает какой-то мелочи, но так и не смог допилить.

Если у кого есть более лучший вариант кода, я не против. Если есть не особо тяжелые варианты из коробки, я не против!
Спасибо.
  • Вопрос задан
  • 4036 просмотров
Решения вопроса 1
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Вариант скликивания секунд:
var _Seconds = $('.timer').text(),
var _Clicks = 0; // счетчик кликов
int;
int = setInterval(function() { // запускаем интервал
if (_Seconds - _Clicks > 1) {
_Seconds--; // вычитаем 1
$('.timer').text(_Seconds - _Clicks); // выводим получившееся значение в блок
} else {
clearInterval(int); // очищаем интервал, чтобы он не продолжал работу при _Seconds = 0
     $('.div_x').addClass('xxx'); //добавляем класс на элемент 1
     $('.div_y').addClass('yyy'); //добавляем класс на элемент 2
  }
}, 1000);


Тут необходимо понимать, что:
1. Обработка происходит раз в секунду, а в ситуации когда до конца осталось пара секунд можно успеть кликнуть по кнопке несколько десятков раз, но это не остановит счетчик.Пользователь все равно будет ждать ближайшего срабатывания setInterval.
2. Для более тонкой обработки алгоритм надр менять. Доберусь до компа, накидаю код.

PS: вот обещанное решение, в нем многое можно изменить и доработать, но оно прекрасно демонстрирует подход, который я хотел Вам показать:

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы