Введение в динамический HTML
Динамический HTML (DHTML) — это набор новых функциональных возможностей, которые изначально были представлены в веб-браузере Microsoft Internet Explorer 4.0. С помощью динамического HTML разработчики могут создавать привлекательные веб-сайты, которые не увеличивают нагрузку на сервер. Отображение и контент веб-страницы изменяются динамически при выполнении пользователем определенных действий. С помощью динамического HTML можно легко реализовывать на страницах сложные эффекты, которые ранее были труднодостижимы. Например, можно выполнять следующие задачи:
Для реализации этих эффектов динамический HTMLизменяет представление текущего документа в памяти и автоматически переформатирует его для отображения изменений. При этом не требуется перезагружать документ, загружать новый документ или создавать новый контент на удаленном сервере. Для отслеживания и реализации изменений используются ресурсы компьютера пользователя. Это означает, что перед просмотром результатов пользователю не требуется ожидать завершения обработки данных и текста на сервере. Кроме того, для реализации изменений динамический HTML не требует дополнительных приложений или встроенных элементов управления. Как правило, документы, созданные с помощью языка DHTML, являются самостоятельными, поэтому обработка пользовательского ввода и прямое управление элементами HTML, атрибутами, стилями и текстом документа осуществляется с помощью стилей и сценариев. Одним словом, динамический HTML устраняет недостатки статических страниц. Разработчики могут создавать веб-сайты с новыми функциональными возможностями как в Интернете, так и в интрасети без ущерба для производительности. Динамический HTMLпозволяет не только улучшить восприятие документа пользователем, но и повысить производительность сервера за счет уменьшения числа запросов к серверу. В следующих разделах приведено более подробное описание динамического HTML и даны практические примеры его использования.
Модель DOM Динамический HTML — это не самостоятельная технология, а продукт трех взаимосвязанных и взаимодополняющих технологий: HTML, спецификации каскадных таблиц стилей (CSS) и сценариев. Чтобы разрешить сценариям и компонентам доступ к функциям HTML и каскадным таблицам стилей, контент документа представляется в виде объектов модели программирования, называемой моделью DOM. API модели DOM являются основой динамического HTML и предоставляют структурированный интерфейс, который позволяет получить доступ к практически любому элементу документа и взаимодействовать с ним. Элементы HTML в документе доступны в виде отдельных объектов. Это означает, что для проверки и изменения элемента и его атрибутов можно считывать и задавать свойства и вызывать методы. Для доступа к тексту, расположенному между элементами, также можно использовать свойства и методы модели DOM. Модель DOM также предоставляет доступ к действиям пользователя, например нажатиям клавиш и щелчкам мышью. Для перехвата и обработки этих и других событий потребуется создать функции обработки событий и подпрограммы. Обработчик событий получает управление при возникновении события и может выполнять любые действия, включая изменение документа с помощью модели DOM. Предупреждение системы безопасности. Некорректное использование некоторых функций динамического HTML может нарушить безопасность приложения. Дополнительные сведения см. в разделе Вопросы безопасности. Динамический HTML. Дополнительные сведения о важных аспектах объектной модели см. в разделах Работа с окнами, фреймами и диалоговыми окнами, Использование элементов и коллекций в сценариях и Общие сведения о модели события. Полный список объектов, свойств, методов, коллекций и методов объектной модели см. в разделе Справочник по динамическому HTML. Динамические стили Динамические стили являются основной функцией динамического HTML. С помощью каскадных таблиц стилей можно быстро изменять вид и форматирование элементов документа без необходимости добавлять или удалять элементы. Это позволяет уменьшить размер документов и ускорить выполнение сценариев. Объектная модель обеспечивает программный доступ к стилям. Это означает, что для изменения встроенных стилей отдельных элементов и правил стилей можно использовать сценарии. Для создания сценариев можно использовать JavaScript, Microsoft JScript или язык сценариев Microsoft Visual Basic Scripting Edition (VBScript). Встроенные стили являются назначениями стилей CSS, которые применяются к элементу с помощью атрибута style. Чтобы проверить и задать стили, необходимо извлечь объект style отдельного элемента. Например, чтобы текст заголовка подсвечивался при наведении указателя мыши, можно использовать объект style для увеличения шрифта и изменения его цвета, как показано в следующем примере. Пример 1 <html> <head> <title>Динамические стили</title> <script language="JavaScript"> function doChanges(e) { e.style.color = "green"; e.style.fontSize = "20px"; } </script> </head> <body> <h3 onmouseover="doChanges(this)" style="color:black;font-size:18px">Добро пожаловать в динамический HTML!</h3> <p>Большие возможности с меньшими усилиями.</p> </body> </html> Пример кода: Пример 1 В примере 1 выполняются следующие действия.
Пример 2 В следующем примере показано, как с помощью стилей скрывать контент на странице до тех пор, пока пользователь не щелкнет мышью. Вместо передачи конечного элемента с помощью указателя this для вызова элементов HTML сценарий использует атрибут id. <html> <head> <title>Динамические стили</title> <script language="JavaScript"> function showMe() { MyHeading.style.color = "red"; MyList.style.display = ""; } </script> </head> <body onclick="showMe()"> <h3 id="MyHeading">Добро пожаловать в динамический HTML!</h3> <p>Большие возможности с меньшими усилиями. Щелкни и смотри!</p> <ul id="MyList" style="display:none"> <li>Изменение цвета, размера и шрифта текста.</li> <li>Отображение и скрытие текста.</li> <li>И многое другое.</li> </ul> <p>И это только начало!</p> </body> </html> Пример кода: Пример 2 Замечания по примеру 2.
Примечание. Если веб-браузер Windows Internet Explorer обнаруживает тег, определяющий атрибут id или name, он создает ссылку на этот тег в глобальной области, чтобы сценарий смог быстро найти его. Однако это не является стандартным поведением. Чтобы динамический HTML поддерживал все веб-браузеры, для поиска конечных элементов используйте метод getElementById. Список разделов с подробным описанием и примерами использования динамических стилей см. в разделе Введение в динамические стили. Динамические стили основаны на рекомендациях консорциума W3C для каскадных таблиц стилей (CSS) для статических таблиц стилей. Динамический контент Динамический HTML позволяет изменять контент после загрузки страницы. Модель DOM обеспечивает доступ ко всем элементам документа HTML, позволяя создавать, вставлять и удалять элементы, а также изменять текст и атрибуты отдельных элементов. Если для просмотра страниц используется веб-браузер, который не поддерживает динамический HTML, возможно, некоторые динамические и интерактивные функции будут недоступны. Поскольку динамический HTML широко распространен, пользователи могут просматривать страницы как с помощью Internet Explorer, так и с помощью любого другого веб-браузера. Однако для того чтобы контент был доступен в веб-браузерах, поддерживающих меньшее число функций, необходимо придерживаться некоторых основных принципов (например, создание страницы с "корректно ухудшающимися" функциональными возможностями). Нестандартный пример Веб-браузер Internet Explorer предоставляет широкий набор свойств и методов для динамического создания и изменения документов. Однако не все методы, поддерживаемые веб-браузером Internet Explorer, приняты веб-сообществом в качестве стандартов. В приведенном ниже примере для замены и изменения элементов используется несколько строк сценария для Internet Explorer. <html> <head><title>Динамический контент</title> <script language="JavaScript"> function changeMe() { MyHeading.outerHTML = "<H1 ID=MyHeading>Динамический HTML!</H1>"; MyHeading.style.color = "green"; MyText.innerText = "Большие возможности с меньшими усилиями."; MyText.align = "center"; document.body.insertAdjacentHTML("BeforeEnd", "<P ALIGN=\"center\">Попробуйте!</P>"); } </script> </head> <body onclick="changeMe()"> <h3 id="MyHeading">Добро пожаловать в динамический HTML!</h3> <p id="MyText">Щелкните левой кнопкой мыши в любой области страницы.</p> </body> </html> Когда пользователь щелкает левой кнопкой мыши в любой области страницы, сценарий выполняет следующие действия.
Стандартные методы модели DOM Модель программирования DOM была разработана для динамического доступа и обновления контента, структуры и стиля документов любого типа. Для реализации этих возможностей модель DOM представляет иерархию документа в виде дерева узлов. Каждый узел может быть описан в терминах предков и потомков. В зависимости от расположения в иерархии узел может иметь дочерние и (или) родительские узлы, а также узлы того же уровня. Стандартные методы модели DOM сосредоточены на иерархической структуре самого документа, а не на разборе и интерпретации строк HTML. В следующей таблице описаны некоторые свойства и методы, которые можно использовать для динамического создания и изменения контента.
Помимо методов, перечисленных выше, большинство веб-браузеров поддерживают свойство innerHTML, которое обеспечивает доступ к коду HTML, расположенному между начальными и конечными тегами элемента. Несмотря на то что свойство innerHTML не определено ни в одном стандарте, зачастую гораздо проще использовать именно это свойство, а не какое-либо другое. Предупреждение системы безопасности. Если при использовании свойства innerHTML для изменения части страниц не полностью контролируется текст, риск атак путем внедрения сценария существенно повышается. Если текст получен от недоверенного источника (например, строка запроса в URL-адресе), для преобразования кода HTML в текст используйте метод createTextNode. Дополнительные сведения см. в справке по свойству innerHTML. Следующий пример — это измененный нестандартный пример, в котором используются более совместимые со стандартами реализации модели DOM. <html> <head><title>Динамический контент</title> <script language="JavaScript"> function changeMe() { // Замена свойства outerHTML методами createElement и replaceChild. var oChild = document.getElementById("MyHeading"); var oNewChild = document.createElement('H1'); oNewChild.id = oChild.id; oNewChild.innerHTML = "Динамический HTML!"; oNewChild.style.color = "green"; oChild.parentNode.replaceChild(oNewChild,oChild) // Замена innerText на innerHTML. MyText.innerHTML = "Большие возможности с меньшими усилиями."; MyText.align = "center"; // Замена метода insertAdjacentHTML("BeforeEnd") на appendChild. var oPara = document.createElement('P'); oPara.innerHTML = "Попробуйте!" oPara.align = "center"; document.body.appendChild(oPara); } </script> </head> <body onclick="changeMe()"> <h3 id="MyHeading">Добро пожаловать в динамический HTML!</h3> <p id="MyText">Щелкните левой кнопкой мыши в любой области страницы.</p> </body> </html> Пример кода: Пример 3 Число строк в примере 3 больше, чем в предыдущем примере, однако этот код работает в большинстве веб-браузеров, имеющихся на данный момент. Основные рекомендации:
Список разделов с подробным описанием и примерами использования динамического контента см. в разделе Дополнительные сведения о динамическом контенте. Позиционирование и анимация Позиционирование — это размещение элементов HTML на странице с помощью координат, задаваемых относительно другого элемента или границ окна веб-браузера. Для размещения таких элементов, как изображения, элементы управления и текст с точно заданными координатами, можно использовать атрибуты top и left. Чтобы определить порядок расположения перекрывающихся элементов, используйте атрибут z-index. Для позиционирования элементов можно использовать одно из следующих ключевых слов:
Позиционирование с помощью каскадных таблиц стилей Позиционирование является компонентом каскадных таблиц стилей. Это означает, что для задания расположения элемента необходимо задать значения соответствующих атрибутов каскадных таблиц стилей для этого элемента. В следующем примере показывается, как задать абсолютное расположение изображения. <html> <head> <title>Позиционирование</title> </head> <body> <h3>Добро пожаловать в динамический HTML!</h3> <p>Позиционирование позволяет точно задать координаты изображения, включая случаи размещения изображения за текстом и другими изображениями.</P> <img style="position:absolute;top:0;left:0;z-index:-1" src="clouds.gif"> </body> </html> Пример кода: Пример 4 В примере 4 выполняются следующие действия.
Позиционирование с помощью сценариев Поскольку модель DOM обеспечивает доступ к стилям и таблицам стилей, задание и изменение расположения любого элемента осуществляется также просто, как задания и изменение цвета. Разработчик может изменять расположение элементов на основании того, как пользователь просматривает документ, а также добавлять анимацию элементов. Для реализации анимации на странице необходимо постепенно изменять расположение элемента в пределах некоторой области страницы. В следующем примере показано изображение, которое плавно перемещается по странице и останавливается у левого поля страницы. <html> <head> <title>Динамическое позиционирование</title> <script language="JavaScript"> var id; function StartGlide() { Banner.style.pixelLeft = document.body.offsetWidth; Banner.style.visibility = "visible"; id = window.setInterval(Glide,50); } function Glide() { Banner.style.pixelLeft -= 10; if (Banner.style.pixelLeft <= 0) { Banner.style.pixelLeft = 0; window.clearInterval(id); } } </script> </head> <body onload="StartGlide()"> <h3>Добро пожаловать в динамический HTML!</h3> <p>Динамическое позиционирование позволяет перемещать изображения в любую область документа, даже если документ просматривается пользователем.</p> <img id="Banner" STYLE="visibility:hidden;position:absolute;z-index:-1" SRC="eightball.gif" /> </body> </html> Пример кода: Пример 5 В примере 5 выполняются следующие действия.
Динамическое позиционирование весьма распространено в клиентских и бизнес-приложениях. Динамические стили, позиционирование, прозрачные изображения и элементы управления Microsoft ActiveX предоставляют широкий набор эффектов анимации. Список разделов с подробным описанием и примерами использования позиционирования с помощью каскадных таблиц стилей см. в разделе Дополнительные сведения о позиционировании элементов. Фильтры и переходы Веб-браузер Internet Explorer поддерживает расширяемую архитектуру, которая позволяет указать фильтры и переходы с помощью свойств каскадных таблиц стилей. Для применения визуальных эффектов к элементам можно использовать визуальные фильтры (в этом случае сценарии не требуются). Синтаксис использования фильтров: filter:имя_фильтра( параметр1, параметр2, ...) Переходы — это эффекты, которые могут применяться без изменения отображения элемента. Переходы наиболее часто используются в презентациях типа "показ слайдов", например переключение с одного изображения на другое. Поддерживаются как переходы между страницами, так и переходы между отдельными элементами на странице. Пример кода: Демонстрация переходов Фильтры — это различные эффекты, например текст с тенью, которые могут применяться к контенту веб-страниц. Чтобы просмотреть демонстрацию различных эффектов статических и анимированных фильтров, на открывшейся странице нажимайте кнопки, расположенные под изображением. Пример кода: Демонстрация фильтров Дополнительные сведения см. в разделе Введение в фильтры и переходы. Загрузка шрифтов Веб-браузер Internet Explorer поддерживает динамическую загрузку шрифтов, используемых на веб-странице. С помощью правила стиля @font-face в документе можно создать ссылку на шрифт, который загружается автоматически и используется только на странице (если страница закрыта, шрифт нигде не используется). Чтобы встроить шрифты в Internet Explorer, необходимо преобразовать символы шрифта TrueType в шрифт Microsoft OpenType с помощью средства Microsoft Web Embedding Fonts Tool (WEFT). Использование загруженных шрифтов показано в следующем примере кода. <html><head> <style type="text/css"> @font-face { font-family:Comic; src:url(http://example.com/fonts/comicbold.eot); } </style> </head> <body> <p style="font-family:Comic;font-size:18pt">Эта строка использует элемент стиля @font-face для отображения текста с помощью полужирного шрифта Comic Sans MS размером 18 пт.</p> </body></html> В этом примере выполняются следующие действия.
Привязка данных Привязка данных — это функция динамического HTML, которая позволяет легко связывать отдельные элементы документа с данными из другого источника, например базы данных или текстового файла с разделителями-запятыми. После загрузки документа данные автоматически извлекаются из источника, форматируются и отображаются в элементе. Одним из примеров практического использования привязки данных является автоматическое и динамическое создание таблиц в документе. Для этого необходимо привязать элемент table к источнику данных. При просмотре документа для каждой записи, извлеченной из источника, в таблице создается новая строка, а ячейки строки заполняются текстом и данными из полей записи. Поскольку данный способ создания таблицы является динамическим, пользователь может просматривать страницу в ходе добавления новых строк в таблицу. Кроме того, поскольку имеются все данные таблицы, можно управлять данными (сортировка или фильтрация), не запрашивая дополнительные данные на сервере. Таблица создается повторно, а для заполнения новых строк и ячеек таблицы используются данные, извлеченные ранее. Другим примером практического использования привязки данных является привязка элементов документа к конкретным полям указанной записи. При просмотре страницы элементы заполняются текстом и данными из полей записи, которая иногда называется текущей записью. В качестве простого примера можно привести форму письма, в которой имя, адрес электронной почты и прочие сведения о контакте заполняются из базы данных. Чтобы адаптировать письмо для конкретного контакта, можно указать, какая запись должна быть текущей. Дополнительные изменения письма не требуются. Еще одним примером практического использования привязки данных является связывание полей формы с полями записи. Пользователь может не только просматривать контент записи, но и изменять этот контент посредством изменения параметров и значений формы. После этого измененные данные можно загрузить в источник, например на HTTP-сервер или в базу данных. Чтобы обеспечить привязку данных в документах, необходимо добавить объект источника данных (DSO) в документ. Этот невидимый объект является элементом управления ActiveX или Java-приложением, которое знает, как взаимодействовать с источником данных. В следующем примере показано, как привязать таблицу к объекту источника данных (DSO). В этом примере все записи из файла с разделителями-запятыми sampdata.csv отображаются в наглядной таблице. <html> <head><title>Пример DataURL</title></head> <body> <object classid="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83" ID="sampdata"> <param name="DataURL" value="sampdata.csv"> <param name="UseHeader" value="True"> </object> <table border="1" datasrc="#sampdata"> <thead><tr><th>A</th><th>B</th><th>C</th></thead> <tbody> <tr> <td><span datafld="a"></span></td> <td><span datafld="b"></span></td> <td align="right"><span datafld="c"></span></td> </tbody> </table> </body> </html> Пример кода: Привязка CSV-файла к таблице Чтобы заполнить таблицу из объекта источника данных, пример выполняет следующие действия.
Дополнительные сведения см. в разделах Введение в привязку данных и Добавление объекта источника данных на страницу. Выводы Динамический HTML работает с приложениями, элементами управления ActiveX и другим встроенными объектами. Разработчик может использовать существующие или создавать новые приложения и элементы управления, которые используют преимущества функциональных возможностей динамического HTML. Если динамический HTML используется для отображения выходных данных и обработки данных, вводимых пользователем, для выполнения задач, которые являются трудоемкими с точки зрения вычислений, лучше использовать приложения и элементы управления. Например, можно создать документ, поддерживающий запрос, отображение и изменение контента большой серверной базы данных, посредством объединения функций привязки данных динамического HTML с объектом источника данных. Объект источника данных извлекает и задает данные в базе данных, а динамический HTML обрабатывает запросы пользователей, отображает данные и обеспечивает требуемое взаимодействие с объектом. Связанные разделы |