Использование расширений функциональности DHTML
Применить расширение функциональности к элементу так же просто, как применить стиль к элементу на странице. В этой статье рассматриваются различные подходы и особенности применения расширений функциональности к стандартным элементам HTML. Кроме того, в ней приводится ряд интересных образцов применения расширений функциональности в Microsoft Internet Explorer 5 и более поздних версиях. После прочтения статьи вы сможете применять расширения функциональности к элементам на собственных страницах, изолировать сценарии от содержимого и добиваться более упорядоченного оформления страниц. Если вы имеете опыт создания страниц с использованием CSS, большая часть сведений в этой статье должна быть вам знакома. Если вы только начинаете осваивать CSS, в разделе Связанные разделы приведены ссылки на статьи, содержащие дополнительные сведения о CSS. Реализация расширений функциональности также выходит за рамки данного документа и рассматривается в других статьях, ссылки на которые можно найти в разделе Связанные разделы.
Применение расширения функциональности к элементу Применить расширение функциональности к элементу в Windows Internet Explorer можно двумя способами.
Применение нескольких расширений функциональности к элементу Чтобы применить несколько расширений функциональности к элементу, можно указать в качестве значения атрибута behavior список URL-адресов, разделенных пробелами, как показано в следующем примере. Этот пример демонстрирует применение двух расширений функциональности к элементу, реализующих сочетание эффектов.
<UL>
<LI STYLE="behavior:url(collapsing.htc) url(hilite.htc)">HTML</LI> <UL> <LI>IE 4.0 authoring tips</LI> : </UL> </UL> Пример кода: http://samples.msdn.microsoft.com/workshop/samples/components/htc/toc/toc.htm Примечание. Для применения дополнительных расширений функциональности к элементу можно вызвать метод addBehavior. Разрешение конфликтов Если к элементу применяется несколько расширений функциональности, конфликты разрешаются в соответствии с очередностью применения расширений функциональности. Это означает, что в приведенном выше примере первым применяется расширение функциональности collapsing.htc, а затем — hilite.htc. Каждое расширение функциональности имеет приоритет над предыдущим. В этом примере не возникает конфликт назначения стилей. Поэтому стили, определяемые каждым из расширений функциональности, применяются к элементу ожидаемым образом. Если же оба расширения функциональности задавали бы цвет элемента, приоритет имело бы расширение функциональности hiliting, так как оно применяется к элементу последним. Это же правило применяется при разрешении конфликтов имен, например имен свойств, методов или событий, предоставляемых несколькими расширениями функциональности. Следует иметь в виду, что, несмотря на возможность использования нескольких расширений функциональности, свойство behavior элемента может переопределяться точно так же, как и свойство color, если к элементу применяется несколько стилей. В следующем примере атрибут behavior определен как для класса Collapsing, так и для встроенного стиля, применяемого к элементу li. При разрешении конфликтов стилей в HTML-документе имеют приоритет правила каскадирования и наследования CSS. В этом случае встроенный стиль имеет приоритет над правилом с селектором CLASS. В соответствии с правилами CSS используется следующий порядок специфичности (от большей к меньшей): (1) встроенный стили; (2) ID; (3) CLASS; (4) элемент HTML. С учетом этого правила встроенный стиль, с помощью которого в примере к элементу применяется расширение функциональности hilite, имеет приоритет над классом Collapsing. Поэтому к элементу li применяется только эффект подсветки; эффект свертывания и развертывания не применяется. <STYLE> UL { font-family: verdana, arial, helvetica, sans-serif; font-size:10} .Collapsing {behavior:url(collapsing.htc) } </STYLE> : <UL> <LI CLASS="Collapsing" STYLE="behavior:url(hilite.htc)">HTML Authoring</LI> : </UL> Пример кода: http://samples.msdn.microsoft.com/workshop/samples/components/htc/refs/multiple.htm Доступ к объектной модели расширения функциональности Как компонент, расширение функциональности DHTML может предоставлять свойства, методы и события, образующие его объектную модель. При применении расширения функциональности к элементу свойства, методы и события элемента расширяются за счет свойств, методов и событий расширения функциональности. Использование свойств Свойства расширения функциональности могут определяться как встроенные аналогично атрибутам HTML или с помощью сценария. Например, рассмотрим расширение функциональности, реализующее отображение и скрытие содержимого. При щелчке по элементу, к которому применяется это расширение функциональности, изменяется видимость элементов, расположенных под ним. Такое расширение функциональности может предоставлять свойство <HEAD> <style> .CollapsingAndHiliting {behavior:url(ul.htc),url(hilite.htc)} </style> </HEAD> <BODY> <UL> <LI CLASS="CollapsingAndHiliting" CHILD="Topics1">HTML Authoring</LI> <UL ID="Topics1"> <LI><A HREF="">Internet Explorer 4.0 authoring tips</A></LI> <LI><A HREF="">Four special effects with Internet Explorer 4.0</A></LI> : </UL> <LI CLASS="CollapsingAndHiliting" CHILD=Topics2>Dynamic HTML (DHTML)</LI> <UL ID=Topics2> <LI><A HREF="">Overview</A></LI> <LI><A HREF="">Technology comparison</A></LI> : </UL> </UL> <BODY> Пример кода: http://samples.msdn.microsoft.com/workshop/samples/components/htc/toc/toc.htm Вызов методов В следующем примере демонстрируется вызов метода расширения функциональности из страницы-контейнера. В этом примере расширение функциональности реализует эффект летающего текста и предоставляет метод tick(). <HEAD> <STYLE> .FLY {behavior:url(fly.htc)} </STYLE> </HEAD> <BODY onload="window.setInterval (oTitle.tick(), 1000)"> <H1 CLASS=FLY ID=oTitle>I Believe I Can Fly</H1> : </BODY> Обработка событий События, инициируемые расширениями функциональности, обрабатываются так же, как и стандартные события DHTML. Дополнительные сведения о различных способах обработки событий в Internet Explorer см. в статье Общие сведения о модели событий. В следующем примере определяются два обработчика событий, Дополнительные сведения о сохраняемости в Internet Explorer 5 см. в статье Общие сведения о сохраняемости. <HEAD> <STYLE> .saveFavorite {behavior:url(#default#savefavorite)} </STYLE> <SCRIPT> function fnSaveInput(){ alert("The onsave event fired."); oPersistInput.setAttribute("sPersistValue",oPersistInput.value); } function fnLoadInput(){ oPersistInput.value=oPersistInput.getAttribute("sPersistValue"); } </SCRIPT> </HEAD> <BODY> <INPUT class=saveFavorite onsave="fnSaveInput()" onload="fnLoadInput()" type=text id=oPersistInput> </BODY> Пример кода: http://samples.msdn.microsoft.com/workshop/samples/author/persistence/saveFavorite_1.htm Связанные разделы Ниже приведены ссылки на дополнительные материалы, посвященные расширениям функциональности DHTML. |