Таймер обратного отсчета для поста не зацикливается

Здравствуйте, у меня есть код, который показывает обратный отсчет будущего поста, как этот 7days 5hrs 3mins 4secs моя проблема в том, что когда я пытался добавить это в цикл while, он работает только с одним последним постом, а не с другим будущим постом. Как мне сделать так, чтобы это зацикливалось. Спасибо

JavaScript:

    <script>
        var end = new Date('<?php echo $date;?>');

            var _second = 1000;
            var _minute = _second * 60;
            var _hour = _minute * 60;
            var _day = _hour * 24;
            var timer;

            function showRemaining() {
                var now = new Date();
                var distance = end - now;
                if (distance < 0) {

                    clearInterval(timer);
                    document.querySelector('.countdown').innerHTML = 'EXPIRED!';

                    return;
                }
                var days = Math.floor(distance / _day);
                var hours = Math.floor((distance % _day) / _hour);
                var minutes = Math.floor((distance % _hour) / _minute);
                var seconds = Math.floor((distance % _minute) / _second);

                document.querySelector('.countdown').innerHTML = days + 'days ';
                document.querySelector('.countdown').innerHTML += hours + 'hrs ';
                document.querySelector('.countdown').innerHTML += minutes + 'mins ';
                document.querySelector('.countdown').innerHTML += seconds + 'secs';
            }

            timer = setInterval(showRemaining, 1000);
        </script>

См. изображение для примера:

Обновление: мне удается показать таймер обратного отсчета в каждом сообщении, используя это:

 document.querySelector(".countdown<?php echo ++$num1?>").innerHTML = days + "d " + hours + "h "
                        + minutes + "m " + seconds + "s ";

теперь проблема в том, что он возвращает одно и то же значение обратного отсчета, как мне сделать его другим. Спасибо

Где эта петля? Насколько я вижу, вы печатаете <div class = "countdown"></div> только один раз. Кроме того, ваша функция showRemaining не может обрабатывать несколько экземпляров.

Nico Haase 24.11.2022 12:03

@NicoHaase Я добавил изображение, которое показывает результат цикла while для публикации, так как вы можете видеть, что таймер показывает только одну строку, которая является последней публикацией. Я хочу показать таймер на каждом посте. Вы можете помочь мне?

Eunice 24.11.2022 12:21

также, что я должен сделать, чтобы он обрабатывал несколько экземпляров, я новичок в Javascript, я понятия не имею, что делать. пожалуйста помоги

Eunice 24.11.2022 13:05

используйте querSelectorAll для класса countdown, затем выполните цикл for для каждого узла, а внутри цикла используйте код обратного отсчета JS.

Vijay Hardaha 24.11.2022 14:28

@VijayHardaha Я пытался использовать querySelectorAll, но это не работает. или я использовал это неправильно document.querySelectorAll('.countdown').innerHTML = days + "d " + hours + "h " + minutes + "m " + seconds + "s "; не могли бы вы помочь мне сделать ваше предложение?

Eunice 25.11.2022 03:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не знаю, лучшее ли это решение, но оно работает для меня, я увеличил все классы и var в цикле, чтобы у него была функция для каждого увеличенного класса.

 var end<?php echo ++$num3;?> = new Date('<?php echo $date;?>');

            var _second = 1000;
            var _minute = _second * 60;
            var _hour = _minute * 60;
            var _day = _hour * 24;
            var timer;
           

            function showRemaining() {
                var now = new Date();
                var distance = end<?php echo ++$num4;?> - now;
                if (distance < 0) {

                    clearInterval(timer);
                    document.querySelector('.countdown<?php echo ++$num2;?>').innerHTML = 'COMPLETED!';

                    return;
                }
                var days = Math.floor(distance / _day);
                var hours = Math.floor((distance % _day) / _hour);
                var minutes = Math.floor((distance % _hour) / _minute);
                var seconds = Math.floor((distance % _minute) / _second);
                   
                    document.querySelector(".countdown<?php echo ++$num1;?>").innerHTML = days + "d " + hours + "h "
                        + minutes + "m " + seconds + "s ";
                   
                
            }

            timer = setInterval(showRemaining, 1000);

Другие вопросы по теме