Вы можете проверить все мои коды на страницах github с помощью этого Ссылка на сайт
Я делаю функцию таймера, и это выглядит так.
function timer() {
seconds += 1;
$(".timer").html(seconds);
timerPrint = setTimeout(timer, 1000);
console.info(seconds);
}
Каждую секунду будет отсчитываться одна секунда.
И я поместил это в функцию события щелчка, потому что я хочу, чтобы при щелчке по элементу li игра запускалась и таймер запускался.
$(document).ready(function () {
let clickhold = [];
$('.card').click(function () {
timer();
$(this).addClass('disable');
// Push the card to compare each other
clickhold.push($(this).children('.fa').attr('class'));
console.info(clickhold);
// Card Open
$(this).addClass("open show");
if (clickhold.length == 2) {
// Call moves Function to count move and stars.
moves();
$('.card').addClass('disable');
if (clickhold[0] === clickhold[1]) {
$('.open.show').removeClass("open show").addClass("match");
console.info('matched');
clickhold = [];
$('.card').removeClass('disable');
} else {
console.info('not matched');
clickhold = [];
let ele = $('.card');
setTimeout(function () {
ele.removeClass("open show");
$('.card').removeClass('disable');
}, 1000);
}
}
})
});
Но проблема в том, что когда я нажимаю каждый элемент li. Функция таймера будет вызвана снова, поэтому счетчик будет работать быстрее. Не каждую 1 секунду. Но я понятия не имею об этом.
Также вы можете изучить функцию setInterval.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Просто проверьте, существует ли уже таймер, и если он есть, просто верните:
function timer() {
if (timerPrint) {
return;
}
seconds += 1;
$(".timer").html(seconds);
timerPrint = setTimeout(timer, 1000);
console.info(seconds);
}
Почему бы вам не сбрасывать таймер при каждом нажатии?