Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Web-программирование - это просто!


Новое на сайте Программирование - это просто! (www.easyprog.ru):

В платном разделе

В бесплатном разделе

Добрый день, уважаемые подписчики!

Тема сегодняшнего выпуска: «Java Script: Дождь на странице».

 

Сегодня мы рассмотрим скрип, создающий эффект дождя.

 

<html>
<head>
<title>Урок 30. Java Script: Дождь на странице</title>


</head>
<body bgcolor="#EDEDED" text="#000000" link="#000000" topmargin="0" leftmargin="0">
<center>


<SCRIPT LANGUAGE="JavaScript">

<!-- Begin
var no = 50;
var speed = 1;
var is_ns = (document.layers) ? 1 : 0;
var is_ie = (document.all) ? 1 : 0;
var s, x, y, sn, cs;
var a, r, cx, cy;
var i, doc_width = 800, doc_height = 600;
if (is_ns) {
         doc_width = self.innerWidth;
         doc_height = self.innerHeight;
}
else
if (is_ie) {
        doc_width = document.body.clientWidth;
        doc_height = document.body.clientHeight;
}
x = new Array();
y = new Array();
r = new Array();
cx = new Array();
cy = new Array();
s = 8;
for (i = 0; i < no; ++ i) {
      initRain();
      if (is_ns) {
           if (i == 0) {
               document.write("<layer name=\"dot"+ i +"\" left=\"1\" ");
               document.write("top=\"1\" visibility=\"show\"><font color=\"blue\">");
               document.write(",</font></layer>");
            }
            else {
                document.write("<layer name=\"dot"+ i +"\" left=\"1\" ");
                document.write("top=\"1\" visibility=\"show\"><font color=\"blue\">");
                document.write(",</font></layer>");
            }
       }
       else
       if (is_ie) {
             if (i == 0) {
                   document.write("<div id=\"dot"+ i +"\" style="\"xPOSITION:" ");
                   document.write("absolute; Z-INDEX: "+ i +"; VISIBILITY: ");
                   document.write("visible; TOP: 15px; LEFT: 15px;\"><font color=\"blue\">");
                   document.write(",</font></div>");
              }
              else {
                   document.write("<div id=\"dot"+ i +"\" style="\"xPOSITION:" ");
                   document.write("absolute; Z-INDEX: "+ i +"; VISIBILITY: ");
                   document.write("visible; TOP: 15px; LEFT: 15px;\"><font color=\"blue\">");
                   document.write(",</font></div>");
              }
         }
}


function initRain() {
a = 6;
r[i] = 1;
sn = Math.sin(a);
cs = Math.cos(a);
cx[i] = Math.random() * doc_width + 1;
cy[i] = Math.random() * doc_height + 1;
x[i] = r[i] * sn + cx[i];
y[i] = cy[i];
}
function makeRain() {
r[i] = 1;
cx[i] = Math.random() * doc_width + 1;
cy[i] = 1;
x[i] = r[i] * sn + cx[i];
y[i] = r[i] * cs + cy[i];
}
function updateRain() {
r[i] += s;
x[i] = r[i] * sn + cx[i];
y[i] = r[i] * cs + cy[i];
}
function raindropNS() {
for (i = 0; i < no; ++ i) {
updateRain();
if ((x[i] <= 1) || (x[i] >= (doc_width - 20)) || (y[i] >= (doc_height - 20))) {
makeRain();
doc_width = self.innerWidth;
doc_height = self.innerHeight;
}
document.layers["dot"+i].top = y[i];
document.layers["dot"+i].left = x[i];
}
setTimeout("raindropNS()", speed);
}
function raindropIE() {
for (i = 0; i < no; ++ i) {
updateRain();
if ((x[i] <= 1) || (x[i] >= (doc_width - 20)) || (y[i] >= (doc_height - 20))) {
makeRain();
doc_width = document.body.clientWidth;
doc_height = document.body.clientHeight;
}
document.all["dot"+i].style.pixelTop = y[i];
document.all["dot"+i].style.pixelLeft = x[i];
}
setTimeout("raindropIE()", speed);
}
if (is_ns) {
raindropNS();
}
else
if (is_ie) {
raindropIE();
}
// End -->
</script>



</body>
</html>
 

 

Запустив его, мы увидим нечто вроде этого (только точки будут быстро падать вниз, создавая эффект дождя):

 

 

А теперь пробежимся по программе:

 

var no = 50;
var speed = 1;
var is_ns = (document.layers) ? 1 : 0;
var is_ie = (document.all) ? 1 : 0;
var s, x, y, sn, cs;
var a, r, cx, cy;
var i, doc_width = 800, doc_height = 600;

 

В этом блоке мы создаем переменные. В частности, переменная speed  регулирует скорость, точнее, замедление. Чем она больше, тем медленнее "идет дождь".  Далее мы берем ширину и высоту документа:

if (is_ns) {
doc_width = self.innerWidth;
doc_height = self.innerHeight;
}
else
if (is_ie) {
doc_width = document.body.clientWidth;
doc_height = document.body.clientHeight;
}

 

Если у нас браузер Netscape, то мы выполняем строки

doc_width = self.innerWidth;
doc_height = self.innerHeight;

 

потому что в этом браузере Netscape такой синтаксис. В IE синтаксис другой и для него мы выполняем другие строки:

 

doc_width = document.body.clientWidth;
doc_height = document.body.clientHeight;

 

Затем мы продолжаем инициализацию переменных:

 

x = new Array();
y = new Array();
r = new Array();
cx = new Array();
cy = new Array();
s = 8;

 

Далее, у нас идет цикл

 

for (i = 0; i < no; ++ i) {

 

он повторяется у нас no раз, в данном примере 50. Иными словами, у нас будет "капать" 50 "капель". Попробуем изменить это число, сделаем больше. Дождь станет чаще. Например, вот так будет выглядеть он при no=1000:

 

 

Наш выпуск получился довольно таки длинный. Поэтому я делю его на две части. В следующий раз расскажу об остальных строках рассматриваемой программы. До новых встреч.

 

 

С уважением, Шуравин Александр, e-mail: megabax@rambler.ru, автор оставляет за собой право публиковать в рассылках ваши письма, если в письме прямо неоговорено нежелание его публиковать.

 


В избранное