JavaScript для мага


Прокрутка - часть 2


  // вырезать начало текста (ту часть, что уже ушла за левую границу

  if (pos < 0) {

    for (var i = 1; i <= Math.abs(pos); i++) {

      scroller = scroller + " ";}

    scroller = scroller + scrtxt.substring(0, width - i + 1);

  }

  else {

    scroller = scroller + scrtxt.substring(pos, width + pos);

  }

 

  // разместить текст в строке состо\яни\я

  window.status = scroller;

 

  // вызвать эту функцию вновь через 100 миллисекунд

  setTimeout("scroll()", 100);

}

 

// -->

</script>

</head>

 

<body onLoad="scroll()">

Наша HTML-страница.

</body>

</html>

 

Большая часть функции scroll() нужна для вычленения той части текста, которая будет показана пользователю. Я не буду объяснять этот код подробно - Вам необходимо лишь понять, как вообще осуществляется эта прокрутка. Чтобы запустить этот процесс, мы используемся процедурой обработки события onLoad, описанной в тэге <body>. То есть функция scroll() будет вызвана сразу же после загрузки HTML-страницы. Через посредство процедуры onLoad мы вызываем функцию scroll(). Первым делом в функции scroll() мы устанавливаем таймер. Этим гарантируется, что функция scroll() будет повторно вызвана  через 100 миллисекунд. При этом текст будет перемещен еще на один шаг и запущен другой таймер. Так будет продолжаться без конца.

 

 (В Netscape Navigator 2. x с таким типом скроллинга были некоторые проблемы - его выполнение иногда приводило к появлению ошибки 'Out of memory'. Я получил много писем, где объяснялось, что это возникает вследствие рекурсивного вызова функции scroll(), что в конце концов приводит к выходу за пределы памяти. Но это не так. Данный вызов функции не является рекурсивным! Рекурсию мы получим, если будем вызывать функцию scroll() непосредственно внутри самой же функции scroll(). А этого здесь мы как раз и не делаем. Прежняя функция, установившая таймер,  закончивается еще до того, как начинается выполнение новой функции. Проблема же состояла в том, что в действительности мы не могли в JavaScript выполнять коррекцию строк. И если Вы пробуете сделать это, то JavaScript просто-напросто создавал новый объект - но при этом не удалял старый. Именно таким образом происходило переполнение памяти.)




Начало  Назад  Вперед



Книжный магазин