Обновлять HTML-страницу каждую новую минуту - PullRequest
0 голосов
/ 26 августа 2018

У меня есть немного кода, который обновляет мою HTML-страницу, каждый раз, когда появляется новая минута, т.е. когда секунды == 0.

<head>
<script>
    function reload(){
        location.reload();
    }
    function refresh(){
        var d = new Date();
        var s = d.getSeconds();
        if (s == 0) {setTimeout(reload(), 1000)};
    }
 </script> </head>
 <body onload="refresh(), setInterval('refresh()',1000)">

Однако, когда он обновляется, он обновляет бесконечное количествовремя в секундах == 0. Я пытался реализовать setTimeout, чтобы этого не происходило - и чтобы он обновлялся только один раз.Тем не менее, это не сработало, и все еще обновляет бесконечное количество раз, пока s == 0. Есть ли у кого-нибудь еще идеи, чтобы предотвратить это?Любые вопросы, просто спросите.Спасибо

Ответы [ 3 ]

0 голосов
/ 26 августа 2018

В общем, освежающий напиток не очень хороший способ делать вещи. Вы рассматривали возможность использования асинхронных вызовов и обновления DOM с помощью JavaScript вместо перезагрузки всей страницы?

Однако, если вы хотите продолжить этот маршрут, я бы взял текущее время начала в качестве базы, и проверка отсюда на 1 секунду уже прошла.

const t0 = performance.now();
function refresh(){
    if ((performance.now() - t0) >= 1000) {
        location.reload();
    }
}

Однако вам нужно вызвать обновление, пока это не произойдет.

Что касается комментария "не понимаю", я убираю немного и добавлю кое-какое объяснение:

Первая строка находится за пределами всех функций, поэтому она задает переменную «глобально», поскольку она никогда не меняется, я использую косантант (вместо переменной) для скорости и читаемости. Устанавливает текущее время в мс insode t0

const t0 = performance.now();

В вашей функции я использую ту же команду, чтобы снова получить мс, и вычесть из нее ранее сохраненную мс. Если новый номер более чем на 1000 больше исходного, прошла секунда, и он может выполнить перезагрузку.

if ((performance.now() - t0) >= 1000) {...
0 голосов
/ 26 августа 2018

Если я правильно понимаю, вы не хотите обновлять через 1 минуту после загрузки, но обновляете, когда секунда = 0.

Вам не нужно постоянно вызывать функцию обновления через интервал.

У нас есть текущая секунда. Итак, если мы вычтем из минуты, мы можем найти оставшиеся секунды до новой минуты.

60 - d.getSeconds();

Затем преобразуйте в миллисекунды, установите время ожидания, и страница будет обновлена ​​точно в новую минуту.

setTimeout(function() { location.reload() }, 1000 * (60 - d.getSeconds()));

Если это так важно, вы можете добавить / вычесть миллисекунды с d.getMilliseconds()

0 голосов
/ 26 августа 2018

Для JavaScript вы можете упростить это до:

setTimeout(() => {
  window.location.reload(1);
}, 60 * 1000);

Однако очень простым решением, не использующим JS, является

<meta http-equiv="refresh" content="60; URL=https://example.com/">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...