КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Что такое HTTP 22 страница
</script>
<body>
<!-- Начинается первый слой --> <img src="1980main.jpg" />
<р>Этот прекрасный загородный дом
<р>Рядом с этим доном расположены не только
<!-- Кончился второй слой --> Здесь мы снова создали два элемента <div> и в качестве начальной установки определили, что первый из них будет спрятан. По нажатию кнопки пользователь может спрятать то, что раньше было видно, а вместо этого увидеть то, что раньше было спрятано. Это делается у нас с помощью специальной функции, меняющей параметр visibility у слоев. Таким образом получается, что содержимое страницы — сменное. Мы как будто меняем кадры диафильма. В браузере это будет выглядеть так, как показано на рис. 19.11, но я тем не менее советую попробовать записать листинг в какой-нибудь файл и протестировать страницу на своем компьютере. Рис. 19.11. Исходная страница (сверху) и та же страница после нажатия кнопки (снизу) Чтобы такая страница не была безвозвратно утеряна для Netscape, где, как вы помните, реализация DOM несколько отличается от IE, следует внести следующие изменения в функцию: function changeVisO { ПРИМЕЧАНИЕ Еще раз напоминаю о том, что пример, показывающий межбраузерную совместимость DHTML, еще впереди. Слои Netscape В Netscape 4.x используется несколько иной подход к слоям. Там имеется элемент <1ауег>. Он никогда, впрочем, не имел особой популярности и так и не был принят в состав стандартных элементов HTML/XHTML. Ко времени выхода в свет 6-го поколения браузеров создатели Netscape смирились с такой участью <lауег> и стали больше смотреть в сторону позиционирования и создания слоев на основе CSSP, оставив этот элемент лишь для совместимости. Между <lауег> и CSSP есть ряд принципиальных разногласий. Будем говорить сейчас об элементе <l ауег>.
Вам уже знаком подход CSSP к позиционированию элементов, поэтому, мне кажется, <lауег> не должен казаться жутко незнакомым. Пример приведен в листинге 19.10. Листинг 19.10. Слои Netscape и позиционирование <html xmlns="http: //www. w3.org/1999/xhtml ">
</head>
</lауег>
<lауег id="mydiv2" top="500" left="50">
<р>Рядом с этим домом расположены не только
</lауег>
</body> Как и <div>, контейнер <lауег> включает в себя весь текст и разметку, которая должна войти в слой. В отличие от <div>, изменения стилей организуются с помощью атрибутов <lауег>, без каких-либо специальных определений таблиц стилей. Позиционирование — абсолютное по натуре своей: указываемые координаты отсчитываются относительно окна браузера. Вы уже успели заметить некоторые атрибуты элемента <lауег>. Ниже приведен полный список с описаниями.
В дополнение ко всему этому следует упомянуть контейнер <nolауег>, содержимое которого будет выведено на экран в том случае, если браузер не имеет поддержки элемента <lауег>. Пример: <nolауег>Эта страница лоступна для просмотра Внутристрочные слои Netscape Это ответ Netscape относительному позиционированию элементов CSSP. Технически он реализуется с помощью элемента <Ilауег>, который задает так называемый внутренний, внутристрочный слой. На самом же деле, как и при относительном позиционировании в CSSP, <ilауег> начинается там, где его содержимое могло бы быть, не будь этого элемента. И относительно этого места экрана ведется отчет параметров top и left. Примером может служить следующий отрывок кода: <body>
<р>0бычный абзац XHTML.</р>
<р>А это снова обычный абзац, он находится на своем Программная обработка слоев Netscape Для манипулирования слоями Netscape можно использовать любой язык написания скриптов, например JavaScript. Объектная модель, правда, слегка отличается от используемой в CSSP (впрочем, она отличается и в зависимости от браузера), поэтому запутаться очень легко. К счастью, хотя бы доступ к свойствам слоев Netscape не является проблемой. Структура его такова: Имя_слоя.Имя_свойства В Netscape имеется множество методов работы с <lауег>, доступ к ним осуществляется следующим образом: Имя_слоя.Имя_метода()
В отличие от многих объектов и элементов Netscape 4, слои могут динамически изменяться. Можно их применять и в Netscape 6, хотя свойства CSSP также не запрещают этого и при этом ближе к «межплатформенности». Свойства объекта layer практически повторяют атрибуты соответствующего эле мента. Единственная существенная разница заключается в применении clip, па раметры которого адресуются по отдельности: layerl.clip! eft, layerl.cliptop, erl.clipright и layerl.clipbottom. Сами слои содержатся в специальном массиве, входящем в состав объекта document. Для того чтобы получить доступ к какому-то конкретному слою, можно использовать его имя в качестве индекса этого массива. document. layers [" layerl" ] Oчень часто бывает удобно завести новую объектную переменную, чтобы рабо-[татьнепосредственно с ней. Это делается при помощи обычного присваивания: МyLayer = document. layers["layerl" ]: Теперь можно спокойно обращаться к свойствам и методам данного слоя: MyLayer.top = 5: Таблица 19.2. Методы объекта layer
layerl.resizeTo(250. 500): Ну, теперь вы уже готовы к непосредственному применению JavaScript. В следующем примере будет использован тот же подход к перемещению слоев, что и в лис тинге 19.9, где было задано два объекта, и по нажатию кнопки они меняли свое свойство видимости. В листинге 19.1 1 примерно то же самое делается с применением элементов <lауег>. Листинг 19.11. Изменение видимости слоев <!DOCTYPE html PUBLIC "\//W3C//DTD XHTML
<html xmlns="http: //www.w3.org/1999/xhtml">
<titlе>Слоеный веб-пирог и Netscape</title>
document. mydiv2. visibility = "show":
document. mydivl. visibility!= "show";
</head>
<input type="button" уаluе="Нажми меня"
<layer id="mydivl" top-"50" left="50">
<р>Этот прекрасный загородный дом
Это придает ему особую прелесть, потому что.
имея во дворе чудесный вишневый сад. вы в то
</lауег>
<lауег id="mydiv2" top="50" left="50" visibility="hide">
<р>Рядом с этим домом расположены не
</body> Очевидно, что этот скрипт очень похож на аналогичный пример, сделанный с расчетом на CSSP. Здесь лишь использован элемент <lауег>, присущий известно какому браузеру, а также его же объектная модель. Но на самом деле, как вы увидите дальше, все это можно совместить и в одной странице. Пример страницы с DHTML, не зависящей от браузера Вот мы и подобрались к вопросу, который уже давно волнует общественность в лице моего читателя: «Да в конце-то концов, могу я сделать хоть что-нибудь, не зависящее от браузера? Хоть одну страницу, которая бы нормально работала и в IE, и в Netscape 4, и в Netscape 6?» Ответ будет утвердительный. Сейчас мы попробуем выявить общие свойства всех браузеров и собрать в одном примере то, что мы делали в листингах 19.9 и 19.11. Для начала разберемся с Netscape 4. Я вас не очень удивлю, если скажу, что при нежелании использовать элемент <lауег> можно спокойно без него обойтись? А это действительно так. Вы забыли, что Netscape 4 очень хорошо понимает, что значит элемент <di v>? Забыли, что идентификаторы можно задать и в секции <style>? Вот каким будет пример DHTML, который распознают все три браузера: <style type="text/css">
#mydivl { Нет сомнений, что любой браузер воспринимает контейнер <body>. Тогда почему же возникают сомнения, будто кто-то из них не будет поддерживать <div> н обработку события onelick.
ПРИМЕЧАНИЕ С технической точки зрения IE 5.5 и выше должен поддерживать подход Netscape 6, однако это привело бы к размножению проверяемых типов браузеров. Вместо трех их стало бы четыре. В общем, поскольку IE 5.5 совместим с IE 4, мы считаем, что IE любой версии — Это одна и та же сущность. Единственный способ постановки версии функции в зависимость от используемого браузера — это проверка его типа и версии. После этого, немного поработав с объектами, мы добьемся своей цели. Вот как будет выглядеть тестирующая часта функции: var isNet4:
var isIE;
if (navigator.appVersion.charAt(O) == 6) isNet6 = true: Рассмотрим, что здесь происходит. Происходит серия маленьких проверок, с помощью которых выявляется, с каким браузером мы имеем дело. 1. Для начала создаются три переменные, которые соответствуют трем типам тестируемых браузеров. 2. Проверяется имя приложения. 3. Если именем является «Netscape», то нужно проверить его версию. В зависимости от этого устанавливается значение true либо переменной 1sNet4, либо isNet6. 4. Если же в имя приложения входит слово «Microsoft», то сразу становится все понятно. Дальше можно ничего не проверять, а установить в true переменную isIE. (Технически это сравнение производится с помощью метода IndexOf. Проверяется, является ли строка "Microsoft" частью имени браузера. Если этот метод возвращает значение, отличное от 1, значит, это так. Способ несколько запутанный, но зато работает.) 5. Теперь мы можем заняться написанием функции, которая, в зависимости от результатов произведенной проверки, выберет, что делать дальше. Здесь мы должны включить в состав переменных visTest, которая будет содержать строку, соответствующую свойству visibility. (Проблема, напомню, в том, что при тестировании видимости для Netscape 4 возможными значениями являются hi de и show, а не hidden и visible. Вместе с тем эти значения просто не будут распознаваться при обработке, а присвоить-то их никто не запрещает. Поэтому никакие уступки Netscape 4 в секции, непосредственно меняющей местами слои, не нужны.) 6. Затем создаются две объектные переменные (divlObject и div20bject), которые призваны исключить разницу в восприятии браузерами свойства visibiIity: van visTest; var divlObject: van div20bject:
if (isNet4) { visTest = "hide": divlObject = document.mydivl: div20bject = document.mydiv2; } Функция закапчивается тем же самым программным «пассажем», который вы видели и в листинге 19.9, и в 19.11. Свойство visibility тестируется, выясняется, не является ли первый слой скрытым. Если не является, то он скрывается, а показывается второй слой. Если же первый слой скрыт, происходит обратное. if (divlObject.visibility!= visTest) { divlObject.visibility = </body> Межбраузерный программный интерфейс (API) В предыдущем параграфе вы наблюдали, как довольно большая программа в o6 щем-то выполняет не такую уж большую работу. Можете себе представить, что будет, если вы попытаетесь написать серьезное веб-приложение с множестве функций? Хотя вполне приемлемо писать подобные вспомогательные функции распознавания браузеров и обобщения своих скриптов путем создания специальных указателей на конкретные элементы DOM, все-таки более грамотным и целе сообразным решением было бы использование специального программного интерфейса приложений (АРГ). Хотя традиционно считается, что API — это привилегия полноценных языков программирования, тем не менее был разработан соответствующий межбраузерный стандарт и для JavaScript. Эти интерфейсы представляют собой предопределенные наборы вызовов функций, что очень сильно упрощает решение таких стандартных задач, как определение версий браузеров. Вместо того чтобы изобретать велосипед, занн маясь написанием давно известных функций, вместо того чтобы еще и отлаживать их, — гораздо проще вызвать стандартную подпрограмму, которая все сделает как нужно. В таких вещах редко требуется гибкость, потому что проблемы эти общеизвестны; программировать их решение самостоятельно просто нет никакого смысла, API можно загрузить в виде внешнего файла скриптов, а вызывать их из своего файла. Звучит заманчиво, не правда ли? Чтобы узнать больше, посетите один из следующих сайтов:
Динамические стили и классы Теперь, когда вы знаете, как с помощью скриптов изменять позиционирование элементов (CSSP), вы запросто освоите динамическое программирование CSS. И это действительно несложно! Впрочем, лишь до тех пор, пока вы не возьметесь подгонять свои скрипты под Netscape 4. Как вы ни будете стараться, ничего у вас не получится, потому что этот браузер, в принципе, не умеет динамически изменять страницы. Меж тем IE 4 это умеет, не говоря уж о более свежих версиях. Так получилось, что только к 6-й версии Netscape обрел эту замечательную возможность. Зато можно с уверенностью сказать, что начиная с этого уровня оба браузера заметно сблизились. Между прочим, мы сейчас с вами говорим о программировании CSSL, потому что возможности CSSP считаются принадлежностью CSS2. Что до CSS1, так это уже давно устоявшийся стандарт, о котором шла речь в главе 10. Вы, должно быть, по- мните font, text, border и прочие свойства. В этом разделе мы рассмотрим программирование CSSL для IE 5.5 и выше, Netscape 6 и совместимых с ними браузеров. Программирование стилей и свойств Учитывая все имеющиеся у вас знания, не хочется даже особо комментировать такие очевидные вещи, как те, что вы сейчас увидите. Например: <html xmlns="http://www.w3.org/1999/xhtml">
function changeText (p) {
TecT l1</p> <p onmouseover="changeText(this)">
</body> Если поместить указатель мыши на один из тестовых абзацев, цвет текста изменится на красный. Стиль меняется с помощью простого присваивания в обработчике событий: p.style.color="red". Можно поэкспериментировать практически с любым стилем из набора CSS1 и менять примерно таким способом свойства. Поскольку большинство значений атрибутов являются строковыми, можно принимать их и от пользователя, а затем заниматься присваиванием, как в листинге 19.13. Листинг 19.13. Изменение цвета текста <!DOCTYPE html PUBtIC "V/W3C//DTD XHTMt
<head>
<script type="text/javascript"> продолжение •&
function changeBack () {
style. backgroundColor = "black"
</script>
<input type="button" уа!ие="Изменить"
</form> </html> В этом примере пользователь может самостоятельно ввести цвет в поле ввода myCol or, затем щелкнуть на кнопке Изменить. При этом вызовется функция changeBack(). Что происходит в этой функции? Введенное пользователем значение перехватывается и присваивается переменной theCol or, после чего определяется стиль всего абзаца. Функция также проверяет, не установлен ли цвет текста белым. В этом случае цвет фона изменяется на черный. ПРИМЕЧАНИЕ Скрипт, в принципе, работать будет, но слишком уж упрощен, поскольку совершенно не принимает в расчет неправильно введенное пользователем значение. Если вы действительно хотите реализовать такого рода алгоритм, следует это делать с использованием меню <select>, предлагая на выбор одно из имен цветов. Или можно создать и отдельную функцию, тестирующую введенные пользователем значения. Не следует забывать, что имена цветов нужно вводить по-английски. Динамические классы и идентификаторы В предыдущем параграфе вы узнали, что, оказывается, можно изменять отдельные свойства элементов, невзирая на то, какими они были. А что, если поменять не свойство, а сам идентификатор класса, изменив тем самым сразу несколько параметров? Ничего сложного в этом нет, и вы сами можете в этом убедиться, изучив листинг 19.14. Листинг 19.14. Динамическое изменение классов CSS <!DOCTYPE html PUBLIC "V/W3C//DTD XHTML
"http://www.w3.org/TR/xhtmll/DTO/
</style> </head>
<form name="forml">
</form>
</body> Итак, что мы имеем? Пользователь щелкает на кнопке Изменить, запуская тем самым функцию. В ней определяется текущее имя класса, используемого в качестве стиля абзаца. Оно присваивается переменной theClass. Потом проверяется, не является ли big значением theCl ass. Если не является, то именно это значение и присваивается. В противном случае theClass объявляется равным small. Таким образом скрипт при каждом нажатии на кнопку меняет стиль текста. Это показано па рис. 19.12. Рис. 19.12. Исходная страница (сверху) и та же страница после нажатия на кнопку (снизу). Изменился класс, а значит, и стиль текста Резюме Тесное сотрудничество технологий JavaScript и CSS дает результат, называемый Dynamic HTML. В те времена, когда Netscape и Internet Expolrer выпустили свои 4-е версии браузеров, аббревиатура DHTML просто не сходила с уст веб-разработчиков. Стараний было много, однако, как потом оказалось, очень во многом браузеры оказались несовместимыми друг с другом. Это, увы, замедлило процесс распространения DHTML. Обе компании затем выпустили браузеры 5-го и 6-го поколений, и вот тогда картина уже несколько изменилась. Наконец-то в Netscape и Internet Explorer можно было найти поддержку CSS, причем как для создания стилей, так и для определения размещения элементов. Стало возможным программирование многих параметров стилей. И все стандартные браузеры стали воспринимать существующую действительность более или менее одинаково. В этой главе вы узнали о свойствах и методах работы с CSSP, затем научились их программировать с помощью скриптов, причем делать это с расчетом на любые браузеры. Как оказалось, все-таки можно написать такую программу, которая будет подстраиваться под любые стандартные программы просмотра веб-страниц, включая Netscape 4.x.
Дата добавления: 2014-12-29; Просмотров: 344; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |