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

  • Автор темы MRW
  • 38
  • Обновлено
  • 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:

MRW


Рег
06 Mar, 2012

Тем
1

Постов
2

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

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

DrSerge


Рег
18 Sep, 2015

Тем
1

Постов
3

Баллов
13
  • 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):
 

287_08


Рег
08 Feb, 2011

Тем
1

Постов
3

Баллов
13
Тем
49554
Комментарии
57426
Опыт
552966

Интересно