Пишу таймер обратного отсчета с помощью javascript в проекте php-mysql, таймер обратного отсчета работает корректно, но проблема в том, что при взаимодействии пользователя с игрой таймер перезапускается. Должен ли я что-то делать с сеансами php?
Есть идеи?
<div>Time left = <span id = "timer"></span></div>
<script>
document.getElementById('timer').innerHTML = 01 + ":" + 00;
startTimer();
function startTimer() {
var presentTime = document.getElementById('timer').innerHTML;
var timeArray = presentTime.split(/[:]+/);
var m = timeArray[0];
var s = checkSecond((timeArray[1] - 1));
if (s==59){m=m-1}
if (m<0){alert('You lose,click reset')}
document.getElementById('timer').innerHTML =m + ":" + s;
setTimeout(startTimer, 1000);
}
function checkSecond(sec) {
if (sec < 10 && sec >= 0) {sec = "0" + sec}; // add zero in front
of numbers < 10
if (sec < 0) {sec = "59"};
return sec;
}
</script>
это игра виселицы, когда пользователь нажимает на букву, чтобы угадать слово, таймер перезапускается.
Я предполагаю, что вы обнаруживаете, что письмо попало, и обновляете всю страницу?
да, я использую сеансы в игре, могу ли я добавить сеансы php в код js?
Понимаю. Суперпростого решения для этого нет. Вы либо должны избегать перезагрузки всей страницы, чтобы таймер javascript мог продолжать работать, либо вы должны отправить информацию о таймере в PHP вместе с нажатой клавишей, чтобы установить таймер на правильное начальное время. Я бы выбрал первый способ. Посмотрите на технологию под названием «AJAX», которая обычно используется для этого.
Третий вариант: вы также можете хранить информацию о таймере в локальном хранилище.
Спасибо, попробую отправить информацию на php..



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


Судя по вашим комментариям к основному вопросу, есть способы, которыми вы можете «сфальсифицировать» это, но я не совсем уверен, что это идеальное решение для вас.
Когда пользователь впервые запускает игру, и вы перенаправляете его с помощью действия php, я предполагаю, что это запускает начальный таймер, а последующие взаимодействия с игрой также сбрасывают таймер.
Вы можете инициировать сеанс php и сохранить время начала игры в переменной сеанса php. Затем, когда страница снова загрузится, проверьте наличие сеанса/переменной, если она установлена, то используйте ее, чтобы сделать все, что вам нужно, поскольку разница между текущим временем и временем начала игры скажет вам, как давно идет игра.
Вы можете передавать переменные из php в JS с помощью:
let js_start_time_variable = "<?=php_start_time_variable?>";
Это решение некрасиво. Я бы порекомендовал использовать что-то вроде vuejs, чтобы сохранить всю игру в одностраничном приложении без использования обновления страницы для php.
Что именно вы подразумеваете под: «когда пользователь делает что-то на экране, таймер перезапускается»?