Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Выполнение JS кода раз в сутки (https://javascript.ru/forum/css-html/84149-vypolnenie-js-koda-raz-v-sutki.html)

maxg5 16.06.2022 12:26

Выполнение JS кода раз в сутки
 
На сайте есть блок с текстом - Сегодня на нашем сайте заказов 40.
Нужно что бы число с количеством заказов менялось раз в сутки в диапазоне от 10 до 50 для каждого пользователя.
Можно с помощью Math.floor генерировать число, записывать в localStorage как я понял.
Помогите пожалуйста грамотно написать скрипт.
Пока вот так получается у меня, но это не совсем то что нужно.
<p>Сегодня на нашем сайте заказов - <span id="zn">32</span></p>
<script>
var logElem = document.querySelector("#zn");
logElem.innerHTML = (Math.floor(Math.random() * 100) + 1);
</script>

ksa 16.06.2022 12:55

Читаешь данные из "хранилища"... Там сумма и дата, когда ты ее "объявил"...
Если там нет ничего... Или уже прошли сутки - объявляешь другую сумму и записываешь в "хранилище" сумму и время ее объявления.

maxg5 16.06.2022 13:21

Это примерно так должно выглядеть?
<p>Сегодня на нашем сайте заказов - <span id="zn">32</span></p>
<script>
var logElem = document.querySelector("#zn");
if(!localStorage.logElem) localStorage.logElem = new Date()
if(localStorage.logElem && new Date() - localStorage.logElem) {
logElem.innerHTML = (Math.floor(Math.random() * 100) + 1);
}
</script>

ksa 16.06.2022 14:59

Цитата:

Сообщение от maxg5
Это примерно так должно выглядеть?

Я не увидел реализации следующих шагов
Цитата:

Сообщение от ksa
Если там нет ничего... Или уже прошли сутки - объявляешь другую сумму и записываешь в "хранилище" сумму и время ее объявления.


maxg5 18.06.2022 15:48

Переписал код. Вот что получилось.
Немного изменил условие. Заманил дату на минуты. Т.е. что бы число с заказами менялось каждую минуту. Почему то не работает.
<p>Сегодня на нашем сайте заказов - <span id="zn">32</span></p>
<script>
function zakaz() {
var logElem = document.querySelector("#zn");
var znn = 30;
var date = new Date;
var time, znach, a, b;
a = localStorage.setItem (time , date.getMinutes());
b = localStorage.setItem(znach , znn);
if (a == date.getMinutes())
{
return true; 
} else {
a = localStorage.setItem (time , date.getMinutes());
logElem.innerHTML = (Math.floor(Math.random() * 100) + 1);
}
}
</script>

рони 18.06.2022 16:31

maxg5,
https://javascript.ru/forum/misc/786...tml#post514405

maxg5 18.06.2022 20:03

рони,
А как сделать что бы этот код работал с localStorage, т.е. как мне нужно.
Я пробовал сделать так, но не получается:
<p>Сегодня на нашем сайте заказов - <span id="zn">32</span></p>
<script>
var date = new Date;
var ll, time;
let nums = [14, 1249, 1327, 1632];// до какого числа анимировать
let secs = [0, 3, 5, 9];//сколько времени будет длится анимация
let pause = [5, 10, 15, 0 ]; //пауза, после которой, запустится следущаяя анимация
const elem = document.querySelector('#zn');
const anim = (i, r) => {
  let d = performance.now(),
  from = +elem.textContent,
  to = nums[i],
  duration = secs[i] * 1000;
  requestAnimationFrame( function e(b) {
  b = (b - d) / duration;
  1 <= b && (b = 1);
  let c = from + (to - from) * b | 0;
   localStorage.setItem(c, c);
  elem.innerHTML = localStorage.getItem(c, c);
  b == 1 && setTimeout(r,pause[i] * 1000);
  1 > b && requestAnimationFrame(e)
})
ll = localStorage.setItem (time , date.getMinutes());
if (localStorage.setItem (time , date.getMinutes()) == ll) {
return true;
} else {
elem.innerHTML = localStorage.getItem(c, c);
}
}
const delay = i => new Promise(r => anim(i, r));

(async () => {
	for (let i = 0; i < secs.length; i++) {
	    await delay(i);
	}
})();
</script>

рони 18.06.2022 20:26

maxg5,
https://javascript.ru/forum/misc/786...tml#post544710

maxg5 20.06.2022 14:05

рони,
Спасибо!
Это то что нужно.
А как сделать что бы в этом вашем коде работа была с целыми числами? Т.е. что бы после запятой не было чисел.
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>

  <script>
document.addEventListener('DOMContentLoaded', ready);
function ready()
{
   const options = {
        increment: .01, // прибавлять от .01 до 0.7
        different: .7,
        basic: 0.7, //начальное число
        delay: 10000, // пауза 10 сек
        differentDelay: 0,
        elem: document.querySelector('.box'), //куда выводить
        key: 'basic' //ключ базы??? localStorage в качестве базы данных
      };
   const random = (increment, different) => +(increment + Math.random() * different);
   const loop = () => {
       options.basic = localStorage.basic ? +localStorage[options.key] : options.basic;
       options.elem.innerHTML = options.basic.toFixed(2);
       options.basic += random(options.increment, options.different);
       localStorage[options.key] = options.basic;
       setTimeout(loop, random(options.delay, options.differentDelay))
   }
   loop()
}

  </script>
</head>

<body>
<div class="box"></div>

</body>
</html>

рони 20.06.2022 14:08

Цитата:

Сообщение от maxg5
что бы после запятой не было чисел.

долго медитировать в конце строки 26)))

maxg5 20.06.2022 14:11

рони,
Спасибо. Все получилось.

maxg5 01.07.2022 18:31

рони,
Использую этот код для вывода количества заказов на сайте.
https://javascript.ru/forum/misc/786...tml#post544710
Но количество заказов растет до нескольких тысяч не останавливаясь.
А как сделать что бы счетчик забрасывался по достижении какого-нибудь числа?

рони 01.07.2022 19:20

maxg5,
ссылку поправьте

рони 01.07.2022 19:27

Цитата:

Сообщение от maxg5
А как сделать что бы счетчик забрасывался по достижении какого-нибудь числа?

строку localStorage[options.key] = options.basic; заменить на
localStorage[options.key] = (+options.basic > 70) ? 5 : options.basic;

maxg5 08.07.2022 16:01

Установил скрипт на сайт.
Все равно количество заказов выводиться не корректно.
Когда на сайте перехожу с одной страницы на другую то скрипт выполняется снова и меняется количество заказов.
Или например захожу на сайт с разных браузеров и в обоих браузерах разное количество заказов.
Как это можно решить? Может хранить значение количества заказов в БД?
Нужно так что бы в течении дня количество заказов на сайте отображалось от 17 до 23 одинаково для всех посетителей сайта.
Это как то можно решить средствами JS? Или тут без PHP не обойтись?

рони 08.07.2022 17:11

maxg5,
делайте всё на сервере, иначе будет разночтение.

Aetae 09.07.2022 21:28

Для разных браузеров - на js никак, т.к. они никак меж собой не связаны.
Цитата:

Или тут без PHP не обойтись?
Тут не обойтись без серверной части, а PHP это или что-либо иное, значения не имеет. Можно вообще на сайте текстовый файлик хранить, цифру в котором руками менять, и подгружать его на страницу.)


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