Динамическое изменение внешнего вида страницы
Чтобы динамически изменять вид нашей веб-страницы, необходимо решить один вопрос: каким образом наш сценарий сможет обращаться к отдельным ее элементам? Существует два способа такого доступа: классический и по имени элемента. Чтобы быть последовательными, давайте сначала рассмотрим первый из них.
Доступ к элементам HTML по номеру
Возьмем такой пример. Предположим, что мы поместили на веб-страницу графический элемент (картинку), но хотим, чтобы она не сразу возникла в своем реальном размере, а постепенно выросло “из ничего”. Для примера можно взять изображение компьютера ATARI-800, которое уже использовалось нами в главе 3. Карту графических ссылок мы в этом примере на него ставить не будем, хотя это легко сделать, просто перенеся код из последнего примера раздела 3.1. Сначала просто поставим картинку на страницу:
<IMG SRC="Images/computer.gif" WIDTH="151" HEIGHT="10" BORDER="0" ALT="Компьютер">Физический размер этой картинки – 451х310, но мы, как видите, специально уменьшили ее ширину и высоту на 300 пикселов. Теперь давайте попытаемся обратиться к ней из сценария JavaScript.
Оказывается, доступ ко всем картинкам на странице можно получить, просто написав метод document.images и указав в квадратных скобках номер картинки на странице. Вообще говоря, такой синтаксис в JavaScript употребляется по отношению к массивам элементов. То есть, если у нас есть массив из пяти элементов под названием MoyMassiv, то к его элементам следует обращаться так: MoyMassiv[0], MoyMassiv[1],…, MoyMassiv[4]. Массив document.images называется коллекцией.
Нумерация картинок начинается с нуля. Наша картинка, как первая на странице, будет иметь номер 0. Следовательно, для обращения к ней из сценария следует использовать метод document.images[0]. Если бы мы поместили на страницу еще одну картинку, после первой, то к этой второй картинке мы могли бы обратиться так: document.images[1].
Теперь мы можем написать функцию, которая будет проверять, не достигла ли еще наша картинка нужного размера, и если нет, то увеличивать ее ширину и высоту. Проверить размеры можно следующим образом:
if (document.images[0].width < 451)То есть, если после номера картинки мы поставим точку и напишем любой имеющийся ее HTML-атрибут, то сможем из сценария узнать его значе ние и, при необходимости, изменить его:
document.images[0].width += 2;В данном случае мы увеличили ширину картинки на 2 пиксела. Точно так же можно поступить и с ее высотой:
document.images[0].height += 2;Теперь, чтобы “зациклить” нашу функцию, можно просто в конце вызвать ее же после некоторой задержки. Например, если наша функция будет называться sizer(), то последней ее строкой может быть:
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
setTimeout("sizer()", 20);Такой вызов функции из самой себя называется рекурсивным вызовом и довольно часто употребляется в JavaScript. (Учтите, что так можно поступать далеко не во всех языках программирования – в некоторых языках из-за рекурсивных вызовов может случиться, например, ошибка переполнения стека, или еще какая-нибудь гадость… Но пока мы пишем код на JavaScript, об этом можно не беспокоиться.) Теперь достаточно один раз вызвать эту функцию, и далее она будет все время вызывать себя сама. Конечно, можно было сделать и как-нибудь по-другому, например оста вить в “теле” функции только само увеличение размера, а проверку и повторный вызов вынести в “тело” документа, написав там что-нибудь вроде:
while (document.images[0].width < 451) setTimeout("sizer()", 20);Однако для иллюстрации возможностей давайте все же применим рекурсивный вызов. Итак, посмотрим, что у нас получается.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML> <HEAD> <TITLE>Картинка с изменяющимся размером</TITLE> <SCRIPT LANGUAGE="JavaScript"> //<!-- function sizer() { if (document.images[0].width < 451) { document.images[0].width += 2; document.images[0].height += 2; setTimeout("sizer() ", 20); } } //--> </SCRIPT></HEAD> <BODY> <IMG SRC="Images/computer.gif " WIDTH="151 " HEIGHT” "10 " BORDER="0 " ALT="Компьютер "> <SCRIPT LANGUAGE="JavaScript "> //<!-- sizer(); //--> </SCRIPT></BODY> </HTML>