Примеры скриптов java

advertisement
PHP Урок 8. Примеры скриптов javascript
Введение в
JS в примерах
Основным инструментом работы и динамических изменений на странице является DOM
(Document Object Model) - объектная модель, используемая для XML/HTML-документов.
Согласно DOM-модели, документ является иерархией.
Каждый HTML-тег образует отдельный элемент-узел, каждый фрагмент текста текстовый элемент, и т.п.
Проще говоря, DOM - это представление документа в виде дерева тегов. Это дерево
образуется за счет вложенной структуры тегов плюс текстовые фрагменты страницы,
каждый из которых образует отдельный узел.
Простейший документ
Построим, для начала, дерево для следующего документа.
1 <html>
2
3
<head>
<title>Заголовок</title>
4
</head>
5
<body>
6
7
Прекрасный документ
</body>
8 </html>
Самый внешний тег - <html>, поэтому дерево начинает расти от него.
Внутри <html> находятся два узла: <head> и <body> - они становятся дочерними
узлами для <html>.
1
PHP Урок 8. Примеры скриптов javascript
Теги образуют узлы-элементы (element node). Текст представлен текстовыми
узлами(text node). И то и другое - равноправные узлы дерева DOM.
Пример посложнее
Рассмотрим теперь более жизненную страничку:
01 <html>
02
<head>
03
<title>
04
О лосях
05
</title>
06
</head>
07
<body>
08
Правда о лосях.
09
<ol>
10
<li>
11
Лось - животное хитрое
12
</li>
13
<li>
14
.. И коварное
15
</li>
16
17
</ol>
</body>
18 </html>
Корневым элементом иерархии является html. У него есть два потомка. Первый -head,
второй - body. И так далее, каждый вложенный тег является потомком тега выше:
2
PHP Урок 8. Примеры скриптов javascript
На этом рисунке синим цветом обозначены элементы-узлы, черным - текстовые
элементы.
Дерево образовано за счет синих элементов-узлов - тегов HTML.
А вот так выглядит дерево, если изобразить его прямо на HTML-страничке:
Кстати, дерево на этом рисунке не учитывает текст, состоящий из одних пробельных
символов. Например, такой текстовый узел должен идти сразу после <ol>. DOM, не
содержащий таких "пустых" узлов, называют "нормализованным".
Пример с атрибутами и DOCTYPE
Рассмотрим чуть более сложный документ.
01
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
02 <html>
03
<head>
3
PHP Урок 8. Примеры скриптов javascript
04
<title>Документ</title>
05
</head>
06
<body>
07
<div id="dataKeeper">Data</div>
08
<ul>
09
<li style="background-color:red">Осторожно</li>
10
<li class="info">Информация</li>
11
</ul>
12
<div id="footer">Made in Russia ©</div>
13
</body>
14 </html>
Верхний тег - html, у него дети head и body, и так далее. Получается дерево тегов:
Атрибуты
В этом примере у узлов есть атрибуты: style, class, id. Вообще говоря, атрибуты
тоже считаются узлами в DOM-модели, родителем которых является элемент DOM, у
которого они указаны.
Однако, в веб-программировании в эти дебри обычно не лезут, и считают атрибуты
просто свойствами DOM-узла, которые, как мы увидим в дальнейшем, можно
устанавливать и менять по желанию программиста.
4
PHP Урок 8. Примеры скриптов javascript
Свойства элементов
У элементов есть масса свойств. Обычно используется максимум треть из них.
Некоторые из них можно читать и устанавливать, другие - только читать.
Есть еще и третий вариант, встречающийся в IE - когда устанавливать свойство можно
только во время создания элемента.
Рассмотрим здесь еще некоторые (не все) свойства элементов, полезные при работе с
DOM.
tagName
Атрибут есть у элементов-тегов и содержит имя тега в верхнем регистре, только для
чтения.
Например,
1 alert(document.body.tagName) // => BODY
style
Это свойство управляет стилем. Оно аналогично установке стиля в CSS.
Например, можно установить element.style.width:
Исходный код этой кнопки:
1 <input
2
type="button"
3
style="width: 300px"
4
onclick="this.style.width = parseInt(this.style.width)-10+'px'"
5
value="Укоротить на 10px"
6 />
Обработчик события onclick обращается в этом примере к свойствуthis.style.width,
т.к значением this в обработчике события является текущий элемент (т.е сама
кнопка). Подробнее об этом - вовведении в события.
Есть общее правило замены - если CSS-атрибут имеет дефисы, то для
установкиstyle нужно заменить их на верхний регистр букв.
Например, для установки свойства z-index в 1000, нужно поставить:
element.style.zIndex = 1000
5
PHP Урок 8. Примеры скриптов javascript
innerHTML
Когда-то это свойство поддерживалось только в IE. Теперь его поддерживают все
современные браузеры.
Оно содержит весь HTML-код внутри узла, и его можно менять.
Свойство innerHTML применяется, в основном, для динамического изменения
содержания страницы, например:
document.getElementById('footer').innerHTML = '<h1>Bye!</h1> <p>See ya</p>'
Пожалуй, innerHTML - одно из наиболее часто используемых свойств DOM-элемента.
className
Это свойство задает класс элемента. Оно полностью аналогично html-атрибуту "class".
elem.className = 'newclass'
Для того чтобы получить доступ к определенному элементу используйте
document.getElementById.
element = document.getElementById(id);
События JavaScript
В JavaScript, как и других объектно ориентированных языках, определен ряд событий, связанных с
элементами документа. Обработчики дают возможность организовать реакцию на возникновение
событий из сценария. При этом соответствующий обработчик указывается как атрибут элемента
HTML-документа; значением этого атрибута является выражение JavaScript. Например,
<div onmouseOver="this.style.bgColor='#CCCCCC'"
onmouseOut="this.style.bgColor='#EEEEEE'
">
Наведите курсор мыши
</div>
6
PHP Урок 8. Примеры скриптов javascript
- наведение и увод курсора мыши на элемент сопровождаются изменением цвета фона.
<body onUnLoad="alert('окно закрывается!'">
- при попытке пользователя закрыть окно и выгрузить документ выводится сообщение
<img src="cat.jpg" onClick="showPict()">
- при щелчке мышью по изображению выполняется некая функция showPict()
Половина обработчиков поддерживаются практически всеми HTML-элементами ( * ). Некоторые
события можно имитировать с помощью соответствующих методов. Ниже приводится список
событий согласно спецификации HTML 4.0 и некоторые события, поддерживаемые MS IE.
Трактовка браузеров может отличаться от стандарта и в плане применимости обработчика к тем
или иным элементам
Метод
имитации
Обработчик
события
Поддерживающие HTMLэлементы
Описание
onAbort
IMG
Прерывание загрузки изображения
onBlur
A, AREA, BUTTON,
INPUT, LABEL, SELECT,
TEXTAREA
Потеря текущим элементом фокуса, т.е.
переход к другому элементу. Возникает
при щелчке мышью вне элемента либо
нажатии клавиши табуляции
blur()
onChange
INPUT, SELECT,
TEXTAREA
Изменение значений элементов формы.
Возникает после потерей элементом
фокуса, т.е. после события blur
change()
onClick
* Практически все
HTML-элементы
Одинарный щелчок (нажата и отпущена
кнопка мыши)
click()
onDblClick
* Практически все
HTML-элементы
Двойной щелчок
onError
IMG, WINDOW
Возникновение ошибки выполнения
сценария
onFocus
A, AREA, BUTTON,
INPUT, LABEL, SELECT,
TEXTAREA
Получение элементом фокуса (щелчок
мышью на элементе или очередное
нажатие клавиши табуляции)
onKeyDown
* Практически все
HTML-элементы
Нажата клавиша на клавиатуре
onKeyPress
* Практически все
HTML-элементы
Нажата и отпущена клавиша на
клавиатуре
focus()
7
PHP Урок 8. Примеры скриптов javascript
onKeyUp
* Практически все
HTML-элементы
Отпущена клавиша на клавиатуре
onLoad
BODY, FRAMESET
Закончена загрузка документа
onMouseDown
* Практически все
HTML-элементы
Нажата кнопка мыши в пределах
текущего элемента
onMouseMove
* Практически все
HTML-элементы
Перемещение курсора мыши в пределах
текущего элемента
onMouseOut
* Практически все
HTML-элементы
Курсор мыши выведен за пределы
текущего элемента
onMouseOver
* Практически все
HTML-элементы
Курсор мыши наведен на текущий
элемент
onMouseUp
* Практически все
HTML-элементы
Отпущена кнопка мыши в пределах
текущего элемента
onMove
WINDOW
Перемещение окна
onReset
FORM
Сброс данных формы ( щелчок по кнопке
<input type="reset"> )
onResize
WINDOW
Изменение размеров окна
onSelect
INPUT, TEXTAREA
Выделение текста в текущем элементе
onSubmit
FORM
Отправка данных формы ( щелчок по
кнопке
<input type="submit"> )
onUnload
BODY, FRAMESET
Попытка закрытия окна браузера и
выгрузки документа
reset()
submit()
* Практически все HTML-элементы : все, за исключением APPLET, BASE, BASEFONT, BDO, BR,
FONT, FRAME, FRAMESET, HEAD, HTML, IFRAME, ISINDEX, META, PARAM, SCRIPT, STYLE,
TITLE
8
PHP Урок 8. Примеры скриптов javascript
setTimeout и setInterval
Почти все реализации JavaScript имеют внутренний таймер-планировщик, который
позволяет задавать вызов функции через заданный период времени.
setTimeout
Синтаксис:
var timerId =
setTimeout(func/code,
delay[, arg1,
arg2...])
Параметры:
func/code
Функция или строка кода для исполнения.
Строка поддерживается для совместимости, использовать её не рекомендуется.
delay
Задержка в милисекундах, 1000 милисекунд равны 1 секунде.
arg1, arg2…
Аргументы, которые нужно передать функции. Не поддерживаются в IE9-.
Исполнение функции произойдёт спустя время, указанное в параметре delay.
Например, следующий код вызовет alert('Привет') через одну секунду:
1
function func()
{
2
alert('Привет');
3
}
4
setTimeout(func,
1000);
Если первый аргумент является строкой, то интерпретатор создаёт анонимную функцию
из этой строки.
То есть такая запись работает точно так же:
1
setTimeout("alert('Привет')",
1000);
9
PHP Урок 8. Примеры скриптов javascript
Использование строк не рекомендуется, так как они могут вызвать проблемы при
минимизации кода, и, вообще, сама возможность использовать строку сохраняется
лишь для совместимости.
Вместо них используйте анонимные функции:
1
setTimeout(function()
{ alert('Привет') },
1000);
Параметры для функции и контекст
Во всех современных браузерах, с учетом IE10, setTimeout позволяет указать
параметры функции.
Пример ниже выведет "Привет, я Вася" везде, кроме IE9-:
1
function sayHi(who)
{
2
alert("Привет,
я " + who);
3
}
4
5
setTimeout(sayHi,
1000, "Вася");
…Однако, в большинстве случаев нам нужна поддержка старого IE, а он не позволяет
указывать аргументы. Поэтому, для того, чтобы их передать, оборачивают вызов в
анонимную функцию:
1
function sayHi(who)
{
2
alert("Привет,
я " + who);
3
}
4
5
setTimeout(function()
{ sayHi('Вася') },
1000);
10
PHP Урок 8. Примеры скриптов javascript
Отмена исполнения
Функция setTimeout возвращает идентификатор timerId, который можно использовать для
отмены действия.
Синтаксис: clearTimeout(timerId).
В следующем примере мы ставим таймаут, а затем удаляем (передумали). В результате
ничего не происходит.
1
var timerId =
setTimeout(function()
{ alert(1) }, 1000);
2
3
clearTimeout(timerId);
setInterval
Метод setInterval имеет синтаксис, аналогичный setTimeout.
var timerId =
setInterval(func/code,
delay[, arg1,
arg2...])
Смысл аргументов — тот же самый. Но, в отличие от setTimeout, он запускает
выполнение функции не один раз, а регулярно повторяет её через указанный интервал
времени. Остановить исполнение можно вызовом clearInterval(timerId).
Следующий пример при запуске станет выводить сообщение каждые две секунды, пока
вы не нажмете на кнопку «Стоп»:
1
<input type="button" onclick="clearInterval(timer)" value="Стоп">
2
3
<script>
4
var i
= 1;
5
var timer =
setInterval(function()
{ alert(i++) }, 2000);
6
</script>
11
Download