Что бы ваш код работа, его нужно переделывать. Почти весь.
У Javascript есть некоторые вещи, которые всегда надо учитывать в коде. Например, обращение к элементам html на странице, возможно только тогда, когда она загрузится и создастся дерево DOM. В моем коде строки 72-74 это ожидание загрузки с создания DOM, и только после этого вызывается основная функция sec при работе которой и идут всякие обращения к элементам. В вашем коде вы один раз получили время, и все. Его же каждый раз новое получать надо. Это делается в функции sec (строки 53-55). Так же каждый раз как (каждую секунду) надо изменять всякие надписи (строки 64-69). А вы задали вызов sec каждую секунду и все. Ну по идее она будет (быть может) показывать и гасить двоеточие. И все. Она ни время не обновляет, ни содержимое html не меняет. То, что вы описали какую то функцию (скажем openCloseStatys), а потом сразу ее вызвали, это значит, что она один раз отработает и все. Если конечно не возникнет ошибок, что элементы DOM к этому времени уже определены |
таймер время работы магазина
Сергей Ракипов,
<!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>
|
рони,
Как я понял что бы время постоянно обновлялось было добавлено 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 |
Цитата:
условно сейчас 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 >= hoursClose * 60) да/нет(true/false) |
рони,
Все понял! спасибо! |
| Часовой пояс GMT +3, время: 01:54. |