Javascript.RU

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

Скрипт обратного отсчета
Есть скрипт обратного отчета

Как можно сделать так что бы было возможность поставить на одну страницы разные даты (любое количество)

<!doctype html>
<html lang="ru">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title></title>
  <style>
    *,
    *::before,
    *::after {
      box-sizing: border-box;
    }

    @media (prefers-reduced-motion: no-preference) {
      :root {
        scroll-behavior: smooth;
      }
    }

    body {
      margin: 0;
      font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
      font-size: 1rem;
      font-weight: 400;
      line-height: 1.5;
      color: #212529;
      background-color: #fff;
      -webkit-text-size-adjust: 100%;
      -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
      display: flex;
      justify-content: center;
    }

    .timer__items {
      display: flex;
      font-size: 48px;
    }

    .timer__item {
      position: relative;
      min-width: 60px;
      margin-left: 10px;
      margin-right: 10px;
      padding-bottom: 15px;
      text-align: center;
    }

    .timer__item::before {
      content: attr(data-title);
      display: block;
      position: absolute;
      left: 50%;
      bottom: 0;
      transform: translateX(-50%);
      font-size: 14px;
    }

    .timer__item:not(:last-child)::after {
      content: ':';
      position: absolute;
      right: -15px;
    }
  </style>
  <script>
    document.addEventListener('DOMContentLoaded', function () {
      // конечная дата
      const deadline = new Date(2023, 00, 01);
      // id таймера
      let timerId = null;
      // склонение числительных
      function declensionNum(num, words) {
        return words[(num % 100 > 4 && num % 100 < 20) ? 2 : [2, 0, 1, 1, 1, 2][(num % 10 < 5) ? num % 10 : 5]];
      }
      // вычисляем разницу дат и устанавливаем оставшееся времени в качестве содержимого элементов
      function countdownTimer() {
        const diff = deadline - new Date();
        if (diff <= 0) {
          clearInterval(timerId);
        }
        const days = diff > 0 ? Math.floor(diff / 1000 / 60 / 60 / 24) : 0;

        $days.textContent = days < 10 ? '0' + days : days;

        $days.dataset.title = declensionNum(days, ['день', 'дня', 'дней']);

      }
      // получаем элементы, содержащие компоненты даты
      const $days = document.querySelector('.timer__days');

      // вызываем функцию countdownTimer
      countdownTimer();
      // вызываем функцию countdownTimer каждую секунду
      timerId = setInterval(countdownTimer, 1000);
    });
  </script>
</head>

<body>
До нового года
  <div class="timer">
    <div class="timer__items">
      <div class="timer__item timer__days">00</div> 
    </div>
  </div>
До Родества 
  <div class="timer">
    <div class="timer__items">
      <div class="timer__item timer__days">00</div> 
    </div>
  </div>
До старого нового года 
  <div class="timer">
    <div class="timer__items">
      <div class="timer__item timer__days">00</div> 
    </div>
  </div>

</body>

</html>
Ответить с цитированием
  #2 (permalink)  
Старый 06.12.2022, 19:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

timers init from data-attribute
Сергей Ракипов,

<!doctype html>
<html lang="ru">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title></title>
    <style>
        *,
        *::before,
        *::after {
            box-sizing: border-box;
        }
        @media (prefers-reduced-motion: no-preference) {
            :root {
                scroll-behavior: smooth;
            }
        }
        body {
            margin: 0;
            font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
            font-size: 1rem;
            font-weight: 400;
            line-height: 1.5;
            color: #212529;
            background-color: #fff;
            -webkit-text-size-adjust: 100%;
            -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
            display: flex;
            justify-content: center;
        }
        .timer__items {
            display: flex;
            font-size: 48px;
        }
        .timer__item {
            position: relative;
            min-width: 60px;
            margin-left: 10px;
            margin-right: 10px;
            padding-bottom: 15px;
            text-align: center;
        }
        .timer__item::before {
            content: attr(data-title);
            display: block;
            position: absolute;
            left: 50%;
            bottom: 0;
            transform: translateX(-50%);
            font-size: 14px;
        }
        .timer__item:not(:last-child)::after {
            content: ':';
            position: absolute;
            right: -15px;
        }
    </style>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            let divs = document.querySelectorAll('[data-end]');
            // склонение числительных
            function declensionNum(num, words) {
                return words[(num % 100 > 4 && num % 100 < 20) ? 2 : [2, 0, 1, 1, 1, 2][(num % 10 < 5) ? num % 10 : 5]];
            }
            // вычисляем разницу дат и устанавливаем оставшееся времени в качестве содержимого элементов
            function countdownTimer() {
                divs.forEach(div => {
                    let deadline = new Date(div.dataset.end);
                    const diff = deadline - new Date();
                    const days = diff > 0 ? Math.ceil(diff / 1000 / 60 / 60 / 24) : 0;
                    div.textContent = days < 10 ? '0' + days : days;
                    div.dataset.title = declensionNum(days, ['день', 'дня', 'дней']);
                })
                setTimeout(countdownTimer, 1000)
            }
            // вызываем функцию countdownTimer
            countdownTimer();
        });
    </script>
</head>
<body>
    До нового года
    <div class="timer">
        <div class="timer__items">
            <div class="timer__item timer__days" data-end="1/1/2023">00</div>
        </div>
    </div>
    До Рождества
    <div class="timer">
        <div class="timer__items">
            <div class="timer__item timer__days" data-end="1/7/2023">00</div>
        </div>
    </div>
    До старого нового года
    <div class="timer">
        <div class="timer__items">
            <div class="timer__item timer__days" data-end="1/14/2023">00</div>
        </div>
    </div>
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 06.12.2022, 19:54
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

рони,
Спасибо друг
Ответить с цитированием
  #4 (permalink)  
Старый 06.12.2022, 19:56
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

я понял отслеживать события с помощью атрибутов
Ответить с цитированием
  #5 (permalink)  
Старый 31.12.2022, 08:55
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

Скажите а JS способен ли находить к примеру каждый второй и четвертый четверг месяца или первое или последнее воскресение месяца.
Ответить с цитированием
  #6 (permalink)  
Старый 31.12.2022, 09:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сергей Ракипов,
да)))
Ответить с цитированием
  #7 (permalink)  
Старый 31.12.2022, 09:29
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

рони,
function getTuesdays(month, year) {
    var d = new Date(year, month, 1),
        tuesdays = [];

    d.setDate(d.getDate() + (9 - d.getDay()) % 7)
    while (d.getMonth() === month) {
        tuesdays.push(new Date(d.getTime()));
        d.setDate(d.getDate() + 7);
    }

    return tuesdays;
}

var meetingTuesdays = [],
    ul = document.getElementById("list"),
    temp,
    li,
    i;

for ( i = 0; i < 12; i += 1) {
    temp = getTuesdays(i, 2023);
    meetingTuesdays.push(temp[1]);
    li = document.createElement("li");
    li.textContent = temp[1];
    ul.appendChild(li);

    meetingTuesdays.push(temp[3]);
    li = document.createElement("li");
    li.textContent = temp[3];
    ul.appendChild(li);
}

console.log(meetingTuesdays);
    </script>


Я нашел как находить сейчас попробую сделать как выводить
Ответить с цитированием
  #8 (permalink)  
Старый 31.12.2022, 10:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сергей Ракипов,
получение даты последней пятницы текущего месяца
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер обратного отсчета DenysV Элементы интерфейса 2 14.07.2021 12:29
Таймер обратного отсчета goofy1337 Общие вопросы Javascript 4 11.04.2018 15:57
Как внедрить таймер обратного отсчета на сутки в колесо фортуны? AlexGraur Общие вопросы Javascript 3 04.08.2015 17:43
Таймер обратного отсчета до события boypush Элементы интерфейса 17 04.05.2015 23:35
Скрипт обратного отсчета времени Extremal1989 Общие вопросы Javascript 13 30.12.2012 11:47