|
||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
Более
сложный Web-сценарий В
прошлой главе говорилось об анимации. Давайте же рассмотрим Web-сценарий, анимирующий
какой-либо элемент страницы, а именно, заставляющий его двигаться по горизонтали
взад-вперед. Вы увидите, что все это делается очень просто и довольно очевидно. <HTML> <HEAD> <ТIТLЕ>Анимация</ТIТLЕ> <STYLE> DIV { font-size: 72; font-weight: bold } </STYLE> <SCRIPT> var
dx, timer; dx = 2; function
movelmage ( ) { livediv.
style. pixelLeft += dx; if
(livediv. style. pixelLeft + livediv. style. pixelWidth ) document.body.clientWidth) dx = -dx; if
(livediv. style. pixelLeft <= 0) dx = -dx; } function
setupAnimation() ( timer
= window. setlnterval ("movelmage ()", 100) } </SCRIPT>
</HEAD> <BODY onLoad="setupAnimation() ; "> <DIV
lD="div1" STYLE="top: 50; left: 50; position: absolute; z-index:
1">J</DIV> <DIV ID="div2" STYLE="top: 50; left:
100; position: absolute; z-index:
-1">a</DIV> <DIV ID="div3" STYLE="top: 50; left:
150; position: absolute; z-index:
1">v</DIV> <DIV ID="div4" STYLE="top: 50; left:
200; position: absolute; z-index:
-1">a</DIV> <DIV ID="livediv" STYLE="top: 80;
left: 0; width: 30; position:
absolute"><IMG SRC="tips.gif "></DIV> </BODY>
</HTML> Сохраните
этот код в файле под именем 13.2.htm. Графическое изображение tips.gif, использованное
в этом примере, вы можете найти в папке Web, вложенной в папку Windows или WinNT.
Поместите файл tips.gif в ту же папку, где находится файл 13.2.htm, после чего
откройте последний в Web-обозревателе. К сожалению, рис. 13.2 не может передать
движение. Рассмотрение
кода нашего примера начнем с секции HTML-заголовка страницы (тег <HEAD>).
Здесь у нас находится небольшая таблица стилей с единственным стилем, переопределяющим
шрифт тега <DIV>. Но, кроме того, здесь располагается код сценария. Он-то
нас и интересует. Этот
код включает определение двух функций: setupAnimation И movelmage. Первая функция
выполняет некие предустановки, необходимые для правильной работы анимации, а
вторая — осуществляет само движение аними-рованного элемента. (В дальнейшем
вы тоже старайтесь давать вашим функциям "говорящие" имена.) Но, кроме
этих функций, здесь есть и другой код, выполняющийся при загрузке страницы: var
dx, timer; dx = 2; В
этом коде мы объявляем две переменные: dx и timer. Первая из них задает значение
приращения, "скачка" анимации, и с ней все понятно. Мы присваиваем
ей значение 2; если движение анимированного элемента покажется вам слишком медленным,
вы можете это значение увеличить. А вот второй переменной займемся поближе.
Рис.
13.2. Анимированный элемент страницы Уже
не раз говорилось, что анимация всегда привязывается к системному таймеру. Это
позволяет проигрывать одно и то же "кино" и на самых медленных, и
на самых быстрых компьютерах с одинаковой скоростью. Как правило, делается это
следующим образом: пишется специальная функция-обработчик события "тика"
этого системного таймера, которая и заставляет анимированный элемент двигаться. Для
того чтобы привязать функцию-обработчик к событию "тика" таймера,
нужно использовать метод setintervai объекта window. Этот метод принимает в
качестве параметра строку с именем функции-обработчика и интервал между "тиками"
в миллисекундах, а возвращает особое значение, называемое идентификатором интервала.
Впоследствии, когда анимация должна быть закончена, нужно будет вызвать метод
ciearinterval объекта window, передав ему этот самый идентификатор. Но, т. к.
у нас анимация проигрывается бесконечно, то и метод ciearinterval не вызывается,
и идентификатор, хранимый в переменной timer, фактически не нужен. Функцию-обработчик
мы привязываем к "тику" таймера в функции setupAnimation. Ее код приведен
ниже. function
setupAnimation() { timer
= window.setlnterval("movelmage()", 100) } Эта
функция, в свою очередь, является обработчиком события onLoad, возникающего
сразу по окончании загрузки Web-страницы. В качестве параметров метода setlnterval
МЫ Передаем ИМЯ функции movelmage И 100 - интервал
между "тиками" в миллисекундах. Обратите также внимание на следующий
код: <BODY
onLoad="setupAnimation();"> С
его помощью к событию onLoad привязывается функция-обработчик. Обратимся
теперь к функции, выполняющей движение анимированного элемента, — movelmage.
Ее код выглядит так: function
movelmage() { livediv.style.pixelLeft
+= dx; if
(livediv.style.pixelLeft + livediv.style.pixelWidth >= document.body.clientwidth)
dx = -dx; if
(livediv.style.pixelLeft <= 0) dx = -dx; } Разберем
его по строкам. Первая строка: livediv.style.pixelLeft
+= dx; или,
как понятнее, livediv.style.pixelLeft
= livediv.style.pixelLeft + dx; увеличивает
значение свойства pixelLeft объекта style на значение переменной dx. Свойство
pixelLeft представляет значение горизонтальной координаты элемента страницы
в пикселах. Вторая
строка: if
(livediv.style.pixelLeft + livediv.style.pixelWidth >= document.body.clientwidth)
dx = -dx; осуществляет
проверку, дошел ли анимированный элемент до правого края страницы. Для этого
мы сначала складываем значение уже знакомого свойства pixelLeft и нового свойства
pixeiwidth, представляющего ширину элемента страницы в пикселах. После этого
мы сравниваем получившуюся сумму со значением свойства ciientwidth объекта body
и, если она стала больше этого значения, меняем знак у значения переменной dx.
Свойство ciientwidth представляет ширину элемента страницы в пикселах, а объект body
— саму Web-страницу, значит, выражение body.clientwidth возвращает значение
ширины всей страницы в пикселах. И
последняя, третья, строка: if
(livediv. style. pixelLeft <= 0) dx = -dx; осуществляет
проверку, дошел ли анимированный элемент до левого края страницы. Для этого
мы просто сравниваем значение свойства pixelLeft с нулем и, если оно стало меньше
нуля, изменяем знак значения переменной dx. После
того как мы сменим знак значения dx, анимированный элемент "поедет"
в противоположную сторону. Таким образом, анимация будет проигрываться бесконечно. Кстати,
рассмотренный нами Web-сценарий не будет работать только в Navigator 4.x. Чтобы
он работал в этой капризной программе, его нужно немного изменить. Измененный
код страницы 13.2.htm по имени 13.3.htm приведен ниже. Подробно описываться
он не будет — попробуйте разобраться с этим кодом сами, на досуге. if
(livediv. style. pixelLeft <= 0) dx = -dx; <HTML>
<HEAD> <TITLE>Анимация</TITLE>
<SCRIPT> var
dx, timer; dx = 2; function
move Image ( ) { document.
livediv. left += dx; if
(document. livediv. left >= document .width) dx = -dx; if
(document. livediv. left <= 0) dx = -dx; } function
setupAnimation ( ) { timer
= window. setlnterval ("movelmage () ", 100) } </SCRIPT>
</HEAD> <BODY onLoad="setupAnimation() ; " STYLE="font-size: 72; font-weight: bold"> <DIV
ID="div1" STYLE="top: 50; left: 50; position: absolute; z-index:
1">J</DIV> <DIV ID="div2" STYLE="top: 50; left:
100; position: absolute; <DIV
ID="div3" STYLE="top: 50; left: 150; position: absolute; z-index:
l">v</DIV> <DIV ID="div4" STYLE="top: 50; left:
200; position: absolute; z-index:
-l">a</DIV> <DIV ID="livediv" STYLE="top: 80;
left: 0; width: 30; position:
absolute">'<IMG SRC="tips.gif"></DIV> </BODY>
</HTML> Правда,
исправленный вариант страницы перестанет работать в других Web-обозревателях... Вот такая анимация...
|
|
|||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||