Ротация баннеров и функция setTimeout()

jenia

Новичок
Ротация баннеров и функция setTimeout()

На сайте есть два блока с баннерами. В одном блоке смена баннеров должна происходить каждые 5 секунд, а во втором - каждые 15 секунд. Но, если использовать функцию setTimeout(), то получается, что в одном из блоков смена происходит не верно. Что делать в такой ситуации?
 

Апокалипсис

тех дир matras.ru
setTimeout не работает дважды кстати. сам недавно обжёгся.
интересно почему ? ведь setInerval это по сути аналог.
 

Апокалипсис

тех дир matras.ru
Я делал так: (пример с рабочего кода)
PHP:
function sTime()
{
if(lTime)
clearInterval(lTime);
  lTime=setInterval("mainrel('','')",10000);
  

}
function kTime()
{
if(fTime)
clearInterval(fTime);
 fTime=setInterval("rrel()",60000);

}
Если поставил setTimeout,clearTimeout - то будет срабатывать тока 1ая ф-ция.
Обе ф-ции подключатся через window.onload
 

maxwell

artifex
setInterval — рекурсивно вызванный setTimeout или я что-то путаю?
А что если сделать что-то вроде счетчика?

PHP:
<script language="JavaScript" type="application/x-javascript">
  var rotated1 = 0;
  var rotated2 = 0;
  var t; // timer
  var c = 0;
  function rotate1() {
      rotated1++;
      document.getElementById("rotated1").innerHTML += rotated1;
  }
  function rotate2() {
      rotated2++;
      document.getElementById("rotated2").innerHTML += rotated2;
  }
  function bannerTimer() {
      if (c == 2) {
          rotate2();
          c = 0;
      }
      rotate1();
      c++;
      t = setTimeout("bannerTimer()",5 * 1000);
  }
</script>
 

dimagolov

Новичок
setInterval — рекурсивно вызванный setTimeout
нет, рекурсивно вызывая setTimeout эмулируют setInterval те, кто не дочитал ман до страницы с setInterval.
уважаемые, ну набуя вам из вызываемой по setTimeout опять ее вызывать? неужели не понятно, что будет погрешность в частоте исполнения (иногда это важно).
и кстати нефиг передавать строку в setTimeout/setInterval, передавайте ссылку на ф-ю. зачем лишний вызов Function создавать?
Да, не забывайте, что если окон более одного, то для корректной работы set / clear надо во-первых оба запускать из одного окна, а во-вторых крайне желательно выполняемый код декларировать в том же окне. если нужен определенный контекст у вызываемой ф-мм - пользуйтесь замыканиями.

-~{}~ 31.03.08 10:23:

Апокалипсис
а объясни, зачем ты запоминаешь интервалы и потом чистишь их перед тем, как по-новой установить? ничего же не меняется от этого, кроме ненужной активности и создания непонятно для чего переменных в глобальном контексте? как по мне, то данные интервалы вообще должны устанавливаться единожды и самое подходящее место это делать - в обработчике onload, без каких-либо дополнительных обверток. Их же, как я понял, останавливать не предется?
 

kruglov

Новичок
Код:
<input id="text1">
<input id="text2">

<script>
function tik1(){
	document.getElementById('text1').value=Math.random()
	setTimeout('tik1()', 600)
}

function tik2(){
	document.getElementById('text2').value=Math.random()
	setTimeout('tik2()', 500)
}

onload=function(){
	tik1()
	tik2()
}
</script>
У меня нормально вразнобой тикают.
 

maxwell

artifex
dimagolov, по-поводу setInterval и setTimeout спорили очень давно и до сих пор, кстати, спорят.
Утечка памяти будет все равно.

setTimeout считается более поддерживаемой функцией нежели setInterval.

В общем, доводов за и против очень много, в конечном итоге программисту решать, что и когда юзать.

За некоторые замечания — спасибо, слишком старый и стереотипный у меня стиль.
 

dimagolov

Новичок
maxwell, про утечки. по-моему они получаются от того, что передавать вызов строкой да еще и рекурсивно. так как для каждого такого вызова будет новый объект конструктором Function создаваться. вопрос в том, когда он убъется и убъется ли вообще.
 

maxwell

artifex
dimagolov, не факт. Это добавляет вероятности, не более.
Хотя по поводу передачи строки согласен — бред.
 
Сверху