Главная
К библиотеке

Military.com Free Screensavers!

DHTML

Объектная модель браузера. Описании сценариев.

Здравствуйте, уважаемые читатели!
Через этот промежуток летнего отпуска я рад снова приступить к своим обзорам. Честно сказать, перед написанием этого обзора я долго думал, как же преподнести ту громадную информацию по DHTML, которая существует... Но, поскольку данная рассылка все-таки называется "азы...", я решил начать действительно с основ. Возможно, что данный обзор покажется многим не очень интересным или уже знакомым, однако, возможно, для многих он будет открытием. По крайней мере, я посчитал, что обойтись без данных знаний многим, только начинающим разбираться в web-дизайне, данный обзор будет просто необходим.

Итак, приступим к рассмотрению объектной модели браузера.
Сразу предупреждаю, что дать полное и подробное описание нет возможности в небольшом обзоре (для этой темы пришлось бы делать отдельный цикл), впрочем, для нормального знания DHTML подобного и не нужно.

(Не могу удержаться от истории: впервые объектная модель появилась в браузере Netscape 2, за что его сразу же полюбили).
Объектная модель - интерфейс между исходным текстом страницы на языке HTML и программой браузера, которая в свою очередь создает окно и заполняет его элементами, которые определены на странице. Как это происходит не столь важно. Важно учесть другое: DHTML - теоретически платформенно-независимый язык, следовательно все браузеры, поддерживающие DHTML должны иметь одну и ту же объектную модель, иначе невозможно создать страницы корректно работающие в разных браузерах. Объектную модель можно определить как совокупность объектов, методов и свойств, а также событий, которые имеются и происходят в программном обеспечении браузера.

Теперь давайте поясним, что такое объекты, методы, свойства на простом примере.
Объектом мы можем назвать телевизор, который включается и выключается по установленному нами таймеру, но как это происходит знать для нас совершенно необязательно.
Метод - это способ работы с объектом (телевизором), кнопки включить, выключить, переключить канал (мы не указываем телевизору в каком порядке должны идти электроны из трубки, мы лишь нажимаем кнопки).
События - способ объекта сообщить нам о том, что произошло: телевизор выключится при долгом отсутствии изображения.
Свойства - это некие характеристики: громкость, яркость нашего телевизора (эти свойства мы можем менять). Или же свойства read-only (только для чтения): дата выпуска телевизора. (изменить их мы не можем, можем лишь обратиться к ним, спросить о них "телевизор")

После краткого описания того, что такое есть объектная модель, давайте приступим к описанию сценариев и того, что это такое. Образно говоря, сценарий- это способ научить страницу реагировать на события, давая возможность общаться с пользователем, чего не могли сделать страницы, написанные на языке HTML 3.2.
Откуда берутся события? (см. объектная модель браузера) Когда вы щелкаете по какому-то объекту в среде Windows, операционнная система формирует некое событие.
В случае с браузером и DHTML постоянный обмен событиями позволяет странице реагировать на сообытия идущие от браузера. И главное, именно создатель страницы может определить на какие события отвечать странице и какие инструкции дать при этом браузеру. Однако, чтобы страница отреагировала на событие, она должна его сначала получить. И мы решим, как длжен отреагировать браузер: например, при клике на ссылку браузер перейдет на другую страницу, но произойдет и событие onclick, отреагировать на которое мы и можем.
Итак, наша задача "захватить" событие и передав его коду на странице, решить нужна ли на него какая-то реакция.
Всего существует 39 событий, которые браузер может передать коду. Но! Каждому элементу в отдельности можн определить лишь ограниченное их количество. Например, тег <h2> поддерживает 14 событий, <img> - 25 и т.д. (Если вас заинтересует список тегов, поддерживающих то или иное событие, пишите, это будет представлено в следующих обзорах).

Маленькое, но необходимое отклонение от темы.
Языки на которых создаются сценарии: JavaScript, VBScript (а также различные "вариации": JScript- написанный Microsoft, например). Сразу вставлю пару слов о своей любимой теме - совместимости. Сценарии поддерживаются и NN и IE начиная с третьих версий. Но: IE 4 и выше поддерживает JavaScript, JScript, VBScript; NN поддерживает только Java Script (если в нем не установлен интерпретатор VBScript). Таким образом, на мой взгляд, стоит изучить Java Script, чем писать на очень похожем, и гораздо более простом в изучении и применении VBScript.
И еще пару слов о том, где расположить сценарий: он должен находится между тегами <script> и </script>, это ясно, но где на странице? Решать вам! Какие есть варианты и в чем их преимущества:
   - поместить сценарий в теге <head>. В этом случае код выполниться перед тем, как загрузиться содержимое страницы (например, для вставки времени или для того чтобы сделать предзагрузку картинок)
   - в конце страницы: тогда основная часть страницы будет загружена до того, как интерпретатор выполнит заданные кодом действия
   - в середине страницы - что-то среднее между двумя вариантами.
Решать вам, согласно вашим целям.

А теперь, после небольшого пояснения, вернемся к тому, как же возможно передать союбытие коду сценария на странице. Я не буду, по указанным выше причинам, рассматривать способы передачи события коду в языке VBScript, скажу лишь, что существует 4 способа. В Java Sсript не так много возможностей для обработки кода. У этого языка есть 2 особенности:
   - в нем поддерживаются только функции,
   - он понятен всем браузерам - это принятый стандарт. (см выше)
Самый привычный способ поймать событие

<script language=JavaScript>
<!--
function fun1(){    //объявление названия функции
if(confirm("Хочется загрузить эту страницу?")){    //окно подтверждения, если верно, то выполняется следующая строка
alert('Отлично! Уже загружено')    //после согласия будет загружена страница
}
else {alert('Ну и не надо! :((')
window.location.href="http://www.rusmedserv.com/pedsurg/"};    //если согласие не дано, то браузер будет переадресован на другую страницу.
}
//--></script>
А теперь как поймать событие:
<body onunload="fun1()">
Привет, рад, что загрузились!
</body>
При полной загрузке страницы будет выполнена функция fun1().

Второй способ - поместить код непосредственно в элемент:
<h2 onclick="alert ('Не кликай по мне!')">Кликни меня! </h2>

Третий способ - написать для каждого элемента свой код:
<h2 id=head2> Сделай двойной клик по мне! </h2>
<script for=head2 event=ondblclick>
<!--
alert('Отличный двойной клик!')
//-->
</script>

Есть еще пара способов, они используются для обработки событий на уровне window - главного элемента в объектной модели браузера. Например в IE мы можем использовать следующий способ:
<html onclick="fun2()">
При клике где - то на странице, будет выполнена функция fun2
И еще одна вариация. Данный метод не является общепринятым и похож на использование VBScript <h2 id=head2> Сделай двойной клик по мне! </h2>

<script >
<!-- function head2.ondblclick(){
alert('Отличный двойной клик!')}
//-->
</script>

То же для всего окна:
<script >
<!-- 
function window.onload(){
alert('Я отлично загрузилась!')}
//-->
</script>

И в окончании обзора я хотел бы привести список всех событий доступных для обработки в DHTML. Если мне удасться продолжить свои обзоры, то этот список будет просто необходим.
onabort- Возникает, когда пользователь прерывает загрузку картинки
onafterupdate- Возникает при окончании передачи данных
onbeforunload- Перед выгрузкой страницы, что позволяет сохранить данные
onbeforeupdate- Возникает перед выгрузкой страницы
onblur- Выход окна из фокуса
onbounce- Происходит в элементе <MARQUEE>, когда значение свойства BEHAVIOR ‰ALTERNATE и содержимое доходит до конца
onchange- Происходит при изменении содержимого элемента
onclick- Происходит, когда кнопка мыши щелкнута на документе
ondataavailable- Происходит периодически, когда данные приходят из асинхронного источника
ondatasetchanged- Происходит при изменении порядка данных, например, при применении фильтрации данных
ondatasetcomplete- Возникает, когда все данные из источника становятся доступными
ondblclick- Происходит, когда пользователь дважды щелкает на документе
ondragstart- Происходит, когда пользователь начинает перетаскивание мышью
onerror- Ошибка при передаче
onerrorupdate -- Возникает при отмене изменения данных событием onbeforeupdate, заменяя событие onafterupdate
onfilterchange- Возникает при смене состояния статического фильтра или при окончании перехода динамического
onfilterevent- Происходит, когда завершен данный переход фильтра
onfinish- Происходит при окончании цикла в элементе <MARQUEE>
onfocus- Элемент становится активным
onhelp- Нажатие пользователем клавиши F1 или Help
onkeydown- Возникает при нажатии клавиши
onkeypress- Возникает при нажатии клавиши и продолжается при удержании клавиши в нажатом состоянии
onkeyup- Возникает, когда пользователь отпускает клавишу
onload- Возникает при полной загрузке элемента
onmousedown- Происходит, когда пользователь нажимает кнопку мыши
onmousemove- Происходит, когда пользователь двигает мышь
onmouseout- Происходит, когда курсор мыши выходит с элемента
onmouseover- Происходит, когда курсор мыши впервые входит на элемент
onmouseup- Происходит, когда пользователь отпускает кнопку мыши
onreadystatechange- Возникает при изменении свойства readystate
onreset- Происходит при очистке формы
onresize- Изменение пользователем размеров окна
onrowenter- Происходит при изменении данных в текущей строке, и доступны новые данные
onrowexit- Происходит перед изменением данных в текущей строке источником
onscroll- Прокрутка окна пользователем
onselect- Происходит при изменении текущего выделения
onselectstart- Происходит, когда пользователь в первый раз запускает выделенную часть документа
onstart- Происходит при начале прокрутки бегущей строки элемента MARQUEE
onsubimt- Происходит при отсылке формы на сервер или нажатии кнопки SUBMIT
onunload- Непосредственно перед выгрузкой страницы.

И в заключении.
Я рад продолжать свои обзоры. В следующих выпусках, если вы сочтете их необходимыми, я постараюсь начать рассмотрение объектов браузера, начиная с объекта window. Думаю, что данный обзор, вполне возможно, вышел несколько неясным и непонятным, однако при подробном рассмотрении объектной модели и, следовательно рассмотрении создания динамических страниц, знания полученные в данном обзоре будут просто жизненно необходимы. Не пугайтесь, если обзор вышел крайне неясным. При рассмотрении объектной модели все встанет на свои места. Вроде все.
И обычная просьба: пишите, советуйте. Ваши письма, отзывы очень важны и играют огромную роль при написании обзоров. Я с огромным вниманием рассмотрю все предложения, а также советы и вопросы. Спасибо всем, кто пишет, предлагает, советует.
С уважением, Петров Михаил.
http://www.rusmedserv.com/pedsurg

Hosted by uCoz