Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.08.2022, 05:27
Новичок на форуме
Отправить личное сообщение для shkarol Посмотреть профиль Найти все сообщения от shkarol
 
Регистрация: 16.08.2022
Сообщений: 3

Как сделать так, чтобы когда урок начинался (наступало 8:00), то выводилось «Урок нач
Как сделать так, чтобы когда урок начинался (наступало 8:00), то выводилось "Урок идёт!" ('Going'), а когда заканчивался (наступало 8:40) - "Урок закончился!" ('Completed'). Когда начинался второй урок (наступало 8:50), выводилось также, как в первом случае, но уже у первого урока была надпись "Завершён!"?

Надеюсь, понятно написал, если что спрашивайте в комментариях!

Есть графический пример, как должно быть:



<div id="time"></div>
<p class="p"></p>
<p class="two" style="color: red;">Upcoming</p>



let clock = document.getElementById("time")

var time = setInterval(function() {
  var date = new Date();
  clock.innerHTML = (date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds());
}, 1000);


let p = document.querySelector('.p')
let two = document.querySelector('.two')
let date = new Date

setInterval(() => {
    
    if(date.getHours() == 8 && date.getMinutes() >= 0 && date.getMinutes() <= 10){
        p.textContent = "Going"
    }

    if(date.getHours() == 8 && date.getMinutes() >= 0 && date.getMinutes() >= 40){
        p.textContent = "Completed"
    }
  
}, 0);

setInterval(() => {
    
    if(date.getHours() >= 8 && date.getMinutes() >= 0 && date.getMinutes() <= 50){
        two.textContent = "Going"
    }

    if(date.getHours() == 9 && date.getMinutes() >= 0 && date.getMinutes() >= 30){
        two.textContent = "Completed"
    }
  
}, 0);
Ответить с цитированием
  #2 (permalink)  
Старый 16.08.2022, 08:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 32,274

shkarol,
форум - поиск - расписание
Ответить с цитированием
  #3 (permalink)  
Старый 16.08.2022, 08:58
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,562

Я не знаю зачем я это сделал, но вот:
https://codepen.io/nexusdeveloper/pen/abYQmyV
<div class="lessons-schedule" style="max-width: 300px;">
  <div class="lessons-schedule__item" data-start="08:00" data-finish="08:40">
    <div class="lessons-schedule__item__icon"></div>
    <div class="lessons-schedule__item__details">
      <div class="lessons-schedule__item__title">Geography</div>
      <div class="lessons-schedule__item__second-line">
        <div class="lessons-schedule__item__status">Loading...</div>
        <div class="lessons-schedule__item__time">08:00 - 08:40</div>
      </div>
    </div>
  </div>

  <div class="lessons-schedule__item" data-start="08:50" data-finish="09:30">
    <div class="lessons-schedule__item__icon"></div>
    <div class="lessons-schedule__item__details">
      <div class="lessons-schedule__item__title">Chemistry</div>
      <div class="lessons-schedule__item__second-line">
        <div class="lessons-schedule__item__status">Loading...</div>
        <div class="lessons-schedule__item__time">08:50 - 09:30</div>
      </div>
    </div>
  </div>

  <div class="lessons-schedule__item" data-start="09:40" data-finish="10:20">
    <div class="lessons-schedule__item__icon"></div>
    <div class="lessons-schedule__item__details">
      <div class="lessons-schedule__item__title">Russian Language</div>
      <div class="lessons-schedule__item__second-line">
        <div class="lessons-schedule__item__status">Loading...</div>
        <div class="lessons-schedule__item__time">09:50 - 10:20</div>
      </div>
    </div>
  </div>

  <div class="lessons-schedule__item" data-start="10:30" data-finish="11:10">
    <div class="lessons-schedule__item__icon"></div>
    <div class="lessons-schedule__item__details">
      <div class="lessons-schedule__item__title">Literature</div>
      <div class="lessons-schedule__item__second-line">
        <div class="lessons-schedule__item__status">Loading...</div>
        <div class="lessons-schedule__item__time">10:30 - 11:10</div>
      </div>
    </div>
  </div>
</div>
<style>.lessons-schedule__item {
  --status-color: inherit;
  --status-indicator-color: var(--status-color);
  --status-indicator-size: 7px;
  display: flex;
  margin-bottom: 15px;
  align-items: center;
}
.lessons-schedule__item--upcoming {
  --status-color: red;
}
.lessons-schedule__item--completed {
  --status-color: green;
}
.lessons-schedule__item--going {
  --status-color: yellow;
}
.lessons-schedule__item__icon {
  margin-right: 10px;
}
.lessons-schedule__item__icon:after {
  content: "";
  width: 30px;
  height: 30px;
  display: block;
  background: gray;
  border-radius: 50%;
}
.lessons-schedule__item__second-line {
  display: flex;
  margin-top: 3px;
}
.lessons-schedule__item__title {
  font-weight: bold;
}
.lessons-schedule__item__status {
  display: flex;
  align-items: center;
  color: var(--status-color);
}
.lessons-schedule__item__status:before {
  content: "";
  display: block;
  width: var(--status-indicator-size);
  height: var(--status-indicator-size);
  background-color: var(--status-indicator-color);
  margin-right: 5px;
  border-radius: 50%;
}
.lessons-schedule__item__time:before {
  content: ", ";
}</style>
<script>document.addEventListener("DOMContentLoaded", () => {
  const STATUSES = {
    upcomming: {
      className: "lessons-schedule__item--upcoming",
      label: "Upcoming",
      match: (now, range) => now < range[0],
      getNextUpdateDelay: (now, range) => range[0] - now
    },

    going: {
      className: "lessons-schedule__item--going",
      label: "Going",
      match: (now, range) => now >= range[0] && now <= range[1],
      getNextUpdateDelay: (now, range) => range[1] - now
    },

    completed: {
      className: "lessons-schedule__item--completed",
      label: "Completed",
      match: (now, range) => now > range[1],
      getNextUpdateDelay: null
    }
  };

  document.querySelectorAll(".lessons-schedule").forEach((container) => {
    const getTimeRange = (item) => {
      const timeRange = ["start", "finish"]
        .map((fieldName) => {
          const range = String(item.dataset[fieldName]).split(":");
          if (range.length < 2) {
            return null;
          }

          const dateInstance = new Date();
          dateInstance.setHours(+range[0]);
          dateInstance.setMinutes(+range[1]);

          return +dateInstance;
        })
        .filter(Boolean)
        .sort((a, b) => {
          return a - b;
        });

      return timeRange.length === 2 ? timeRange : null;
    };

    container
      .querySelectorAll(".lessons-schedule__item")
      .forEach(function updateItem(item) {
        const range = getTimeRange(item);
        if (!range) {
          return;
        }

        const now = Date.now();
        const statusContainer = item.querySelector(
          ".lessons-schedule__item__status"
        );
        let activeStatus = null;

        for (const statusDefinition of Object.values(STATUSES)) {
          const isActive = statusDefinition.match(now, range);
          item.classList[isActive ? "add" : "remove"](
            statusDefinition.className
          );
          if (!isActive) {
            continue;
          }

          statusContainer.textContent = statusDefinition.label;
          activeStatus = statusDefinition;
        }

        if (!activeStatus?.getNextUpdateDelay) {
          return;
        }

        setTimeout(
          () => updateItem(item),
          activeStatus?.getNextUpdateDelay(now, range)
        );
      });
  });
});

if (document.readyState === "completed") {
  document.dispatchEvent(new Event("DOMContentLoaded"));
}
</script>

Последний раз редактировалось Nexus, 16.08.2022 в 09:01.
Ответить с цитированием
  #4 (permalink)  
Старый 16.08.2022, 09:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 32,274

Nexus,
Ответить с цитированием
  #5 (permalink)  
Старый 16.08.2022, 20:54
Новичок на форуме
Отправить личное сообщение для shkarol Посмотреть профиль Найти все сообщения от shkarol
 
Регистрация: 16.08.2022
Сообщений: 3

Nexus, огромное спасибо!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать, чтобы при наведении на кнопку справа от нее появлялись текстовые ссылки? Tass Общие вопросы Javascript 7 17.02.2011 08:06
Как сделать, чтобы span или div исчезали и появлялись плавно? Бобр Общие вопросы Javascript 30 15.02.2011 18:44
Как сделать так, чтобы при сабмите формы напечатанный текст не исчезал? Athlet Общие вопросы Javascript 1 18.07.2010 01:44
Как сделать так, чтобы JS при нажатии на кнопку не выполняла запрос со страницы. JSProgrammer Элементы интерфейса 3 18.05.2010 19:18
Как сделать, чтобы 2 ссылки отображались как hover при наведении мышкой на любую? Ava Элементы интерфейса 5 19.05.2009 22:24