Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как подключить или просто кодам написать следующий таймер? (https://javascript.ru/forum/jquery/79899-kak-podklyuchit-ili-prosto-kodam-napisat-sleduyushhijj-tajjmer.html)

Pavel_16 05.04.2020 13:14

Как подключить или просто кодам написать следующий таймер?
 
Есть таймер
function timer(elem, min, sec) {
  (--sec < 0) && (sec = min-- ? 59 : 0);
  min = Math.max(min, 0);
  elem.innerHTML = min + " : " + sec;
  if (sec || min)
    setTimeout(timer.bind(0, elem, min, sec), 1000);
  else {
    alert('Время вышло!');
    location.href = "/rekord.html";
  }
}

timer(document.getElementById('play_timer'), 3, 0);

//Время в игре

function tick() {
  var nowTime = new Date();
  console.log('прошло секунд: ' + (nowTime + timer) / 1000);


А вот нашел таймер который записывает данный в локал стореч(на основе стандартных JQuery )
var interval;
let minutes = 1;
let currentTime = localStorage.getItem('currentTime');
let targetTime = localStorage.getItem('targetTime');
if (targetTime == null && currentTime == null) {
     currentTime = new Date();
     targetTime = new Date(currentTime.getTime() + (minutes * 60000));
     localStorage.setItem('currentTime', currentTime);
     localStorage.setItem('targetTime', targetTime);
}
else{
     currentTime = new Date(currentTime);
     targetTime = new Date(targetTime);
}

if(!checkComplete()){
     interval = setInterval(checkComplete, 1000);
}

function checkComplete() {
     if (currentTime > targetTime) {
       clearInterval(interval);
       alert("Time is up");
     } else {
       currentTime = new Date();
       document.write(
        "\n <font color=\"white\"> Seconds Remaining:" + ((targetTime - currentTime) / 1000) + "</font>");
     }
}

document.onbeforeunload = function(){
     localStorage.setItem('currentTime', currentTime);
}

Подскажите, как переделать, так что бы он работал без подключения просто на JS.

рони 05.04.2020 13:23

Pavel_16,
:-?

Pavel_16 05.04.2020 13:40

Цитата:

Сообщение от рони (Сообщение 522242)
Pavel_16,
:-?

да рони и мне не понятно многое)))
все продолжаю бороться с тем же ,но осталось только захватить киким-то образом время от начала загрузки страницы и поместить его в стореч. Но таймер должен отображаться для пользователя..

рони 05.04.2020 14:13

Pavel_16,
я не понимаю, что вы пишите, в чём проблема?

рони 05.04.2020 14:24

Pavel_16,
if ([...elements].every(ep => ep.getAttribute('fill') != '#ffffff')) {
      tick();
      let time = document.getElementById('play_timer').innerHTML;
      // здесь сохраняйте куда вам нужно
      setTimeout(() => alert('Вы всё закрасили!'));
      /*location.href = "/rekord.html";*/
    }

Pavel_16 05.04.2020 16:01

Цитата:

Сообщение от рони (Сообщение 522248)
Pavel_16,
if ([...elements].every(ep => ep.getAttribute('fill') != '#ffffff')) {
      tick();
      let time = document.getElementById('play_timer').innerHTML;
      // здесь сохраняйте куда вам нужно
      setTimeout(() => alert('Вы всё закрасили!'));
      /*location.href = "/rekord.html";*/
    }

Цитата:

Сообщение от рони
// здесь сохраняйте куда вам нужно

у меня есть некий локал стореч, куда до этого было имя записано, туда же нужно сохранить и время, дописать к имени, (простите, если не так излогаюсь), а в таблице по запросу вывести имя и рекорд.

"use strict";

$(document).ready(function(){

if (localStorage.getItem("users") === null) {
  $.getJSON('Storage/users.json', function(users) {
    localStorage.setItem("users", JSON.stringify(users));
  });
}

var users = localStorage.getItem("users");

var $select = $('#name');  
$select.ready(function(event){ 
    $.each(JSON.parse(users), function (key, value) {
      $('<option>').val(value.name).text(value.name).appendTo($select);
    });
});

$('#play_game').click(function() {
  var userName = $('#new_name').val();
  var newUser = {name:userName};
  users = JSON.parse(users);
  users.push(newUser);
  console.log(users);
  localStorage.setItem("users", JSON.stringify(users));
});
});

рони 05.04.2020 16:15

Pavel_16,
надо обьединять скрипты, чтоб имя было доступно в игре ...
как то так ...
if ([...elements].every(ep => ep.getAttribute('fill') != '#ffffff')) {
      tick();
      let time = document.getElementById('play_timer').innerHTML;
      newUser.time = time;
      localStorage.setItem("users", JSON.stringify(users));
      // здесь вывод таблицы на основе обьекта users
      setTimeout(() => alert('Вы всё закрасили!'));
      /*location.href = "/rekord.html";*/
    }

Pavel_16 05.04.2020 20:55

Цитата:

Сообщение от рони (Сообщение 522252)
Pavel_16,
надо обьединять скрипты, чтоб имя было доступно в игре ...
как то так ...
if ([...elements].every(ep => ep.getAttribute('fill') != '#ffffff')) {
      tick();
      let time = document.getElementById('play_timer').innerHTML;
      newUser.time = time;
      localStorage.setItem("users", JSON.stringify(users));
      // здесь вывод таблицы на основе обьекта users
      setTimeout(() => alert('Вы всё закрасили!'));
      /*location.href = "/rekord.html";*/
    }

не работает, вот что выдаёт
svg.js:54 Uncaught ReferenceError: newUser is not defined
at SVGPathElement.handleClick (svg.js:54)
handleClick @ svg.js:54
+ до это-го прошло секунд: NaN

рони 05.04.2020 21:05

Цитата:

Сообщение от Pavel_16
не работает,

Цитата:

Сообщение от рони
надо обьединять скрипты, чтоб имя было доступно в игре ...

:(

рони 05.04.2020 21:07

Pavel_16,
var userName и var newUser нужно сделать глобальными


Часовой пояс GMT +3, время: 21:17.