Практическое введение в программирование на JavaScript

         

Бегущая строка



Пример 2.4. Бегущая строка

<HTML> <!-- ady@demos.su, Saturday, January 20, 1996 7:23:31 PM--> <!-- Demos WWW cover page --> <HEAD> <TITLE>Welcome to Demos Company - Moscow, Russia</TITLE>   <!-- yet another scroller. (C) 1996 Dmitry Altukhov, ady@demos.su --> <!--   Use this code for whatever purposes... provided that you retain the copyright notice. I accept no responsibility for any disasters caused by this monster. Cannot guess any other cool places for scrollers. And MSIE marquee emulation in JS?! Er... Mozilla clears windows too slow in JS... -->   <SCRIPT LANGUAGE="JavaScript"> <!-- roll it   var rate, pos=0; function roll() { var loop, top, msg1; var msg="Hello World"; for(var i=0; i<10; i++) { msg = msg + (" Hello World"); } //move on, make a scrolly... and who said that scrollers suck?! ;-)   top=(130/msg.length)+1; for(loop=0; loop<top; loop++) msg+=" "+msg; msg1=msg.substring (pos, pos+130); window.defaultStatus=msg1; if (pos++ == 130) pos=0;   //come on, the poor thing can't roll any faster... buy a Ferrari. ;-)   rate=setTimeout("roll()",30); }   // that's all folks ;-) // end --> </SCRIPT> </HEAD> <BODY BACKGROUND="back.gif" BGCOLOR="#FFFFFF" TEXT="#000040" LINK="#000080" VLINK="#400080" ALINK="#FF0000" onLoad="roll()"> ..... </BODY> </HTML>

Здесь приведен фрагмент страницы компании Демос разработанный Дмитрием Алтуховым (andy@demos.su). Как видно из этого примера, прокрутка осуществляется за счет изменения содержания отображаемой переменной msg1. Запускается бегущая строка в момент загрузки страницы по событию onLoad. Из комментария к примеру следует, что автор не несет ответственность за проблемы, которые может данный скрипт породить при его отображении программой просмотра на компьютере пользователя. Собственно проблема вызвана применением функции setTimeout. Изначально предполагалось, что программа просмотра, которая поддерживает JavaScript будет исполняться в среде многопотоковых операционных систем. В этом случае к моменту порождения нового потока старый уже завершится и setTimeout будет таким образом порождать последовательно исполняемые потоки. Однако, при реализации JavaScript в Netscape Navigator 2.0 не все было выполнено аккуратно, и setTimeout стала просто "пожирать" ресурсы компьютера. Системы Windows 3.x вообще не являются много поточными и в них просто происходит переполнение стека при выполнении данного скрипта. Весь вопрос заключается только в том, как быстро "упадет" система, что зависит от объема исполняемой по setTimeout функции. Самое лучше, что можно посоветовать, если вдруг на экране появляется прокрутка - поскорее покинуть такую страницу. Справедливости ради следует отметить, что прокрутку можно организовать и другими способами, поэтому ее появление не обязательно должно вызывать крах системы или крах программы просмотра.

Прокручивать можно и вертикальные фрагменты. Достигается это за счет использования полей типа TEXTAREA.



Содержание раздела