Нужна помощь в таймере обратного отсчета Javascript

  • Автор темы I AM
  • Обновлено
  • 13, May 2024
  • #1
привет всем, я хотел бы попросить помощи по поводу таймера JavaScript.

я хотел бы, чтобы javascript выполнял обратный отсчет и перенаправлялся на определенную страницу, когда окно не в фокусе, оно приостанавливает или не продолжает обратный отсчет.

ниже приведен сценарий, который у меня есть:
 <script type="text/javascript">
$(document).ready(function(){
 var seconds = <?php echo $seconds ?>,
 second = 0,
 url = '<?php echo Helper::safeJs($url) ?>';
 var interval = setInterval(function(){
 $('#second').html(seconds - second);
 if (second >= seconds) {
 document.location.href = url;
 clearInterval(interval);
 }
 second++;
 }, 1000);
});
</script>

<p align="center" class="pressed" style="line-height:150%">
<?php echo sprintf(Lang::model()->get('Redirect_Timer'), '<strong>'.CHtml::encode($url).'</strong>', '<strong><span id="second">'.(int)$seconds.'</span></strong>'); ?>
</p>
PHP:

I AM


Рег
23 Jul, 2011

Тем
403760

Постов
400028

Баллов
2418908
  • 06, Jun 2024
  • #2
Вы хотите проверить Document.hasFocus(). Я бы оставил таймер на 1 секунду, как он позволяет ему работать, но внутри обратного вызова просто выполните if (Document.hasFocus()) { /* счетчик обновления здесь */ }
https://developer.mozilla.org/en-US/docs/Web/API/Document/hasFocus

Тем не менее, вам действительно не следует использовать PHP для генерации JavaScript — вы хотите передавать ему значения, которые сейчас являются задачей атрибута данных. У вас даже не должно быть сценариев в разметке внутри
 

Laurencassi89835


Рег
18 Sep, 2015

Тем
71

Постов
205

Баллов
560
  • 07, Jun 2024
  • #3
нашел решение этой проблемы. спасибо @deathshadow за комментарий. вот код, который я нашел:
 <script type="text/javascript">
$(document).ready(function(){
 var isActive = true;
 var seconds = <?php echo $seconds ?>,
 second = 0,
 url = '<?php echo Helper::safeJs($url) ?>';
 var interval = setInterval(function(){
 if(!isActive) {
 return;
 }
 $('#second').html(seconds - second);
 if (second >= seconds) {
 document.location.href = url;
 clearInterval(interval);
 }
 second++;
 }, 1000);

 window.onfocus = function () {
 isActive = true;
 };
 window.onblur = function () {
 isActive = false;
 };
});
</script>
Код (PHP):
 

Franskern43


Рег
08 Feb, 2011

Тем
76

Постов
192

Баллов
612
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно