Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 12.04.2020, 12:04
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,746

Что бы ваш код работа, его нужно переделывать. Почти весь.
У Javascript есть некоторые вещи, которые всегда надо учитывать в коде.
Например, обращение к элементам html на странице, возможно только тогда, когда она загрузится и создастся дерево DOM.

В моем коде строки 72-74 это ожидание загрузки с создания DOM, и только после этого вызывается основная функция sec при работе которой и идут всякие обращения к элементам.

В вашем коде вы один раз получили время, и все. Его же каждый раз новое получать надо. Это делается в функции sec (строки 53-55). Так же каждый раз как (каждую секунду) надо изменять всякие надписи (строки 64-69).

А вы задали вызов sec каждую секунду и все. Ну по идее она будет (быть может) показывать и гасить двоеточие. И все. Она ни время не обновляет, ни содержимое html не меняет.
То, что вы описали какую то функцию (скажем openCloseStatys), а потом сразу ее вызвали, это значит, что она один раз отработает и все. Если конечно не возникнет ошибок, что элементы DOM к этому времени уже определены
Ответить с цитированием
  #12 (permalink)  
Старый 12.04.2020, 12:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,115

таймер время работы магазина
Сергей Ракипов,

<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>
<body>
  <div id="work_schedule">
    <p id="current_time" class="line"></p>
    <p id="hours" class="line"></p>
    <p id="dot" class="line">:</p>
    <p id="minutes" class="line"></p>
    <p id="statys"></p>
    <p id="remains"></p>
  </div>
  <script>
   // JavaScript Document
   let hours;
   let minutes;
   let time;
   let dot = document.getElementById("dot");
   dot.style.color = "black";
   let currentTime = document.getElementById("current_time");
   let hoursInput = document.getElementById("hours");
   let minutesInput = document.getElementById("minutes");
   let statys = document.getElementById("statys");
   let remains = document.getElementById("remains");
   let hoursOpen = 8;
   let hoursClose = 20;
   let oneMinuts = 0;
   let rezult_1 = "";
   let rezult_2 = "";
   let endingHour = "";
   let endingHour_2 =["с", "са", "сов"];
   let endingMinut = "";
   let endingMinut_2 =["a", "ы"];
   let open = "До отрытия ";
   let close = "До закрытия ";
   let openClose = "";
   function sec() {
     if(dot.style.color == "black") {
       dot.style.color = "white";
     }
     else {
       dot.style.color = "black";
     }
   }
   setInterval(sec, 1000);
   function openCloseStatys() {
     if(time < hoursOpen * 60) {
       statys.innerHTML = `Закрыто`;
       statys.style.backgroundImage = "url('close.png')";
       openClose = open;
       time = hoursOpen * 60 - time;
     }
     else if(time >= hoursClose * 60) {
       statys.innerHTML = `Закрыто`;
       statys.style.backgroundImage = "url('close.png')";
       openClose = open;
       time = hoursOpen * 60 + 24 * 60 - time;
     }
     else {
       statys.innerHTML = `Открыто`;
       statys.style.backgroundImage = "url('open.png')";
       openClose = close;
       time = hoursClose * 60 - time
     }
   }
   function timeHours() {
     rezult_1 = Math.floor(time / 60);
   }
   function timeMinuts() {
     rezult_2 = time % 60;
   }
   function timeZero(num) {
     if(num < 10) {
       num = "0" + num;
     }
     return num
   }
   function endingHourFun() {
     if(rezult_1==1) {
       endingHour = endingHour_2[0];
     }
     else if(rezult_1>=2&&rezult_1<=4) {
       endingHour = endingHour_2[1];
     }
     else if(rezult_1 == 0 ||rezult_1>=5&&rezult_1<=23) {
       endingHour = endingHour_2[2];
     }
   }
   function endingMinutFun() {
     if(rezult_2==1) {
       endingMinut = endingMinut_2[0];
     }
     else if(rezult_2>=2&&rezult_2<=4) {
       endingMinut = endingMinut_2[1];
     }
     else if(rezult_2>=5&&rezult_2<=20) {
       endingMinut = endingMinut;
     }
     else if(rezult_2==21) {
       endingMinut = endingMinut_2[0];
     }
     else if(rezult_2>=22&&rezult_2<=24) {
       endingMinut = endingMinut_2[1];
     }
     else if(rezult_2>=25&&rezult_2<=30) {
       endingMinut = endingMinut;
     }
     else if(rezult_2==31) {
       endingMinut = endingMinut_2[0];
     }
     else if(rezult_2>=32&&rezult_2<=34) {
       endingMinut = endingMinut_2[1];
     }
     else if(rezult_2>=35&&rezult_2<=40) {
       endingMinut = endingMinut;
     }
     else if(rezult_2==41) {
       endingMinut = endingMinut_2[0];
     }
     else if(rezult_2>=42&&rezult_2<=44) {
       endingMinut = endingMinut_2[1];
     }
     else if(rezult_2>=45&&rezult_2<=50) {
       endingMinut = endingMinut;
     }
     else if(rezult_2==51) {
       endingMinut = endingMinut_2[0];
     }
     else if(rezult_2>=52&&rezult_2<=54) {
       endingMinut = endingMinut_2[1];
     }
     else if(rezult_2>=55&&rezult_2<=60) {
       endingMinut = endingMinut;
     }
   }
   function loop()
   {
     let localTime = new Date;
     hours = localTime.getHours();
     minutes = localTime.getMinutes();
     time = hours * 60 + minutes;
     openCloseStatys();
     timeHours();
     timeMinuts();
     endingHourFun();
     endingMinutFun();
     currentTime.innerHTML = `Текущие время`;
     hoursInput.innerHTML = `${timeZero(hours)}`;
     minutesInput.innerHTML = `${timeZero(minutes)}`;
     remains.innerHTML = `${openClose}${timeZero(rezult_1)} ча${endingHour} ${timeZero(rezult_2)} минут${endingMinut}`;
     window.setTimeout(loop, 1000);
   }
   loop()
  </script>
</body>
</html>
Ответить с цитированием
  #13 (permalink)  
Старый 14.04.2020, 05:52
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

рони,
Как я понял что бы время постоянно обновлялось было добавлено

window.setTimeout(loop, 1000);
которое говорит, окну запускать функцию loop раз в секунду.

И вот это мне не до конца понятно

function timeHours() {
     rezult_1 = Math.floor(time / 60);
   }
   function timeMinuts() {
     rezult_2 = time % 60;
   }
   function timeZero(num) {
     if(num < 10) {
       num = "0" + num;
     }
     return num
   }


Я не понимаю вот этого условия
(time < hoursOpen * 60)
(time >= hoursClose * 60)

И не понимаю вот этого действия

time = hoursOpen * 60 - time;
time = hoursOpen * 60 + 24 * 60 - time;
time = hoursClose * 60 - time
Ответить с цитированием
  #14 (permalink)  
Старый 14.04.2020, 07:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,115

Сообщение от Сергей Ракипов
И не понимаю вот этого действия

time = hoursOpen * 60 - time;
time вначале это время в минутах от начала дня, а затем время в минутах до открытия или закрытия.
условно сейчас 5 : 0 утра значит 5 * 60 + 0= 300 минут.
открытие в 8, 8 * 60 = 480 минут.
разница 480 - 300 = 180 минут. time = hoursOpen * 60 - time;
180 сколько это часов Math.floor(time / 60) = 3 часа
остаток минут от 180, time % 60 = 0 минут.
текущее время 5(часов) надо добавить до 05, делаем это с помощью timeZero
0(минут) надо добавить до 00, делаем это с помощью timeZero
итого: текущее время 05 : 00
до открытия осталось 3 часа 0 минут.
Сообщение от Сергей Ракипов
Я не понимаю вот этого условия
(time < hoursOpen * 60)
(time >= hoursClose * 60)
время сейчас меньше времени открытия? (time < hoursOpen * 60) да/нет(true/false)
время сейчас больше времени закрытия или равно? (time >= hoursClose * 60) да/нет(true/false)

Последний раз редактировалось рони, 15.04.2020 в 07:23. Причина: время сейчас больше времени закрытия или равно?
Ответить с цитированием
  #15 (permalink)  
Старый 15.04.2020, 05:04
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

рони,
Все понял! спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчёт рабочего времени fenix_63 Общие вопросы Javascript 11 01.02.2017 12:08
Система оценки качества трафика в реальном времени - White Diagnostic rumarkin Общие вопросы Javascript 0 18.06.2016 00:07
Вывести количество часов и минут до рабочего времени Sigizmund2012 Элементы интерфейса 9 23.04.2015 11:29
нужен обратный отчет времени на JS на картинке okapo Работа 3 20.01.2012 17:46
нужен обратный отчет времени на JS на картинке okapo AJAX и COMET 2 20.01.2012 04:39