Objects
Иерархия классов
Объектно ориентированный язык программирования предполагает наличие иерархии классов объектов. В JavaScript такая иерархия начинается с класса объектов window, т.е. каждый объект приписан к тому или иному окну. Для обращения к любому объекту или его свойству указывают полное или частичное имя этого объекта или свойства объекта, начиная с имени объекта старшего в иерархии, в который данный объект входит:
window.document.location
window.document.images[0].src
Вообще говоря, JavaScript не является классическим объектным языком. В нем нет наследования и полиморфизма. Программист может определить свой собственный класс объектов через оператор function, но чаще пользуется стандартными объектами, их конструкторами и вообще не использует деструкторов классов. Это объясняется тем, что область действия JavaScript- программы не распространяется обычно за пределы текущего окна.
В ряде случаев у разных объектов JavaScript определены свойства с одинаковыми именами. В этом случае нужно четко указывать, свойство какого объекта программист хочет использовать. Например, window и document имеют свойство location. Только для window это объект класса location, а для document - строковый литерал, который принимает в качестве значения URL загруженного документа.
Следует также учитывать, что для многих объектов существуют стандартные методы преобразования значений свойств объектов в обычные переменные. Например, для всех объектов по умолчанию определен метод преобразования в строку символов: toString(). В примере с location, если обратиться к window.location в строковом контексте, то будет выполнено преобразование умолчания и программист этого не заметит:
<script>
document.write(window.location);
document.write("<br>");
document.write(document.location);
</script>
Результат исполнения
document.write(window.location);
document.write("
");
document.write(document.location);
Однако разница все-таки есть и довольно существенная. В том же примере получим длины строковых констант:
<script>
w=toString(window.location);
d=toString(document.location);
h=window.location.href;
document.write(w.length);
document.write(d.length);
document.write(h.length);
</script>
Результат исполнения
w=toString(window.location);
d=toString(document.location);
h=window.location.href;
document.write("window.location - ",w.length,"
");
document.write("document.location - ",d.length,"
");
document.write("window.location.href - ",h.length);
Как видим, при обращении к свойству объекта типа URL, а location как раз объект данного типа, длина строки символов после преобразования будет другой.
Optima
Оптимизация отображения.
При программировании графики следует учитывать множество факторов, которые влияют на скорость отображения страницы и скорость изменения графических образов. При этом обычная дилемма оптимизации программ - скорость или размер занимаемой памяти, решается только путем увеличения скорости. О размере памяти как-то не принято думать при программировании на JavaScript.
Из всех способов оптимизации отображения картинок мы остановимся только на нескольких из них:
Оптимизация отображения при загрузке
Оптимизация отображения за счет предварительной загрузки
Оптимизация отображения за счет нарезки изображения
Если первые две позиции относятся в равной степени как к отображению статических картинок, так и к мультипликации, то третий пункт характерен, главным образом, для мультипликации.
Оптимизация при загрузке
Практически любое руководство по разработке HTML-страниц указывает на то, что при использовании контейнера IMG в теле HTML-страницы хорошим тоном является указание атрибутов width и height. Диктуется это порядком загрузки компонентов страницы с сервера и алгоритмом работы HTML-parser. Первым загружается текст разметки. После этого parser разбирает текст и начинает загрузку дополнительных компонентов, в том числе и графики. При этом загрузка различных картинок, в зависимости от типа HTTP-протокола, может идти последовательно или параллельно.
Также параллельно с загрузкой parser продолжает свою работу. Если для картинок заданы параметры ширины и высоты, то можно отформатировать текст и отобразить его в окне браузера. До тех пор пока эти параметры не определены, отображения текста не происходит.
Таким образом, указание высоты и ширины картинки позволит отобразить документ раньше, чем картинки будут получены с сервера. Это дает возможность пользователю читать документ или воспользоваться его гипертекстовыми ссылками до момента полной загрузки(событие load).
С точки зрения Javascript указание размеров картинки задает начальные параметры окна отображения графики внутри документа. Это позволяет воспользоваться маленьким, абсолютно прозрачным образом, для того, чтобы заменить его полноценной картинкой:
Идея состоит в передаче маленького объекта для замещения его большим объектом по требованию.
начало страницы
Предварительная загрузка
Замена одного образа другим часто бывает оправдана только в том случае, когда происходит достаточно быстро. Если перезагрузка длится долго, то эффект, которого хотят добиться, теряется. Для такой быстрой подмены используют возможность предварительной загрузки документа в специально созданный объект класса Image:
Реальный эффект можно почувствовать только при отключении кэширования страниц на стороне клиента (браузера). Кэширование часто используют для ускорения работы со страницами Web-узла. Как правило, загрузка первой страницы - это достаточно длительный процесс. Самое главное, что пользователь в этот момент готов немного подождать. Поэтому кроме графики необходимой только на первой странице ему можно передать и графику, которая на этой странице не отображается. Но зато при переходе к другим страницам узла она будет отображаться без задержки на передачу с сервера.
Описанный только что прием не однозначен. Его оправдывает только то, что если пользователь нетерпелив, то он вообще отключит передачу графики.
начало страницы
Нарезка картинок
Нарезка картинок применяется довольно часто. Она позволяет достигать эффекта частичного изменения отображаемой картинки. Наиболее часто он применяется при создании меню:
Кроме этого эффекта нарезка позволяет реализовать достаточно эффективную мультипликацию на больших картинках. При этом изменяется не весь образ, а только отдельные его части:
Из примера видно, что изменение части образа довольно сильно изменяет скорость отображения. При изменении всей картинки о мультипликации можно говорить достаточно условно.
Path
Изменение части URL
Гипертекстовая ссылка - это объект класса URL. У этого объекта можно изменять и другие свойства.
Проиллюстрируем эту возможность при частичном изменении ссылки. Распечатаем сначала свойство, которое не зависит от протокола(в нашем случае от javascript) document.links[11].pathname:
document.write(window.document.next.document.links[0].pathname);
Если теперь заменить в функции line() href на pathname и убрать "javascript:" из присваемого значения, то все будет работать точно так же, как и в случае с изменением href.
line1(0);
function line1(a)
{
if(a==0)
{
clear();
document.o3.src="../images/jsi/fio.gif";
document.links[15].pathname=
"document.f2.fi1.value=
'Иванов И.И.';void(0);";
document.o4.src="../images/jsi/rpho.gif";
document.links[16].pathname=
"document.f2.fi2.value=
'123-45-67';void(0);";
document.o5.src="../images/jsi/hpho.gif";
document.links[17].pathname=
"document.f2.fi3.value=
'987-65-43';void(0);";
}
...
}
Если обратите внимание на поле status окна браузера, то там нет отличий от случая с атрибутом href.
Right Frame
");
id.right.document.write("
");
id.right.document.write("
");
id.right.document.write("");
id.right.document.write("
Select
Списки и падающие меню
Одним из важных элементов интерфейса пользователя является меню. В HTML-формах для реализации меню используются поля типа select(контейнер SELECT, который, в свою очередь, вмещают в себя контейнеры OPTION). Эти поля представляют собой списки вариантов выбора. При этом список может "выпадать" или скролиться внутри окна. Поля типа select позволяют выбрать из списка только одну альтернативу, либо отметить несколько альтернатив. Для управления полями типа select в JavaScript существует объекты SELECT и OPTION.
Эти объекты характеризуются следующими свойствами, методами и событиями:
form
length name options[] selectedIndex type | blur()
click() focus() | onBlur
onChange onFocus | |||
defaultSelected
index selected text value | нет
нет |
Мы не будем описывать всех свойств, методов и событий этих двух объектов. Остановимся только на типовых способах применения их комбинаций. Не смотря на то, что объект OPTION в нашей таблице находится ниже, что отражает его подчиненное по отношению к SELECT положение, начнем с описания применения его свойств и особенностей.
Объект OPTION
Объект OPTION интересен тем, что в отличие от многих других объектов JavaScript OPTION имеет конструктор. Это означает, что программист может сам создать объект OPTION:
opt = new Option( [ text, [ value, [ defaultSelected, [ selected ] ] ] ]);
text - строка текста, которая размещается в контейнере LI (<li>text)
value - значение, которое передается серверу при выборе альтернативы, связанной с объектом OPTION
defaultSelected - альтернатива выбрана по умолчанию(true/false)
selected - альтернатива выбрана(true/false)
На первый взгляд не очень понятно для чего может программисту понадобится такой объект, ведь создать объект типа Select нельзя и, следовательно, нельзя приписать ему новый объект OPTION. Все становится понятным, когда речь заходит об изменении списка альтернатив встроенных в документ объектов SELECT. Делать это можно, т.к. изменение списка альтернатив SELECT не приводит к переформатированию документа. Изменение списка альтернатив позволяет решить проблему создания вложенных меню, которых нет в HTML-формах, путем программирования обычных меню(options[]).
При программировании альтернатив( объект OPTION) следует обратить внимание на то, что среди свойств OPTION нет свойства name. Это означает, что к объекту нельзя обратиться по имени. Отсутствие свойства объясняется тем, что у контейнера OPTION нет атрибута name. К встроенным в документ объектам OPTION можно обращаться только как к элементам массива options[] объекта SELECT.
начало страницы
options[]
Массив options[] - это свойство объекта SELECT. Элементы этого массива обладают теми же свойствами, что и объекты OPTION. Собственно, это и есть объекты OPTION, встроенные в документ. Они создаются по мере загрузки страницы браузером. Программист имеет возможность не только создавать новые объекты OPTION, но и удалять уже созданные браузером:
<form name=f0>
<select name=s0>
<option>Первая альтернатива
<option>Вторая альтернатива
<option>Третья альтернатива
</select>
<input type=button value="Delete last option" onClick="document.f0.s0.options[document.f0.s0.length-1]=null;">>
<input type=reset value=Reset>
</form>
альтернатива Один
альтернатива Два
альтернатива Три
В данном примере при загрузке страницы с сервера определено три альтернативы. Они появляются, если выбрать поле SELECT. После нажатия на кнопку удаления последней альтернативы("Delete last option") остается только две альтернативы. Если еще раз нажать на кнопку удаления альтернативы, то останется только одна альтернатива и т.д.. В конечном счете, может остаться 0 альтернатив, т.е. вообще пользователь лишится всякого выбора. Кнопка Reset показывает, что альтернативы утеряны бесследно, т.к. после нажатия на эту кнопку содержание поля SELECT не восстанавливается.
Теперь используя конструктор OPTION сделаем процесс обратимым:
function def_f1()
{
document.f1.s1.options[0] = new Option("альтернатива Один","",true,true);
document.f1.s1.options[1] = new Option("альтернатива Два");
document.f1.s1.options[2] = new Option("альтернатива Три");
return false;
}
...
<form name=f1 onReset="def_f1();">
<select name=s1>
<option>альтернатива Один
<option>альтернатива Два
<option>альтернатива Три
</select>
<input type=button value="Delete last option" onClick="document.f1.s1.options[document.f1.s1.length-1]=null;">
<input type=reset value=Reset>
</form>
альтернатива Один
альтернатива Два
альтернатива Три
В данном случае мы обрабатываем событие reset(контейнер FORM). При этом создаем новые объекты типа OPTION и подчиняем их объекту SELECT. При этом первый элемент массива должен быть выбран по умолчанию, чтобы промоделировать поведение при начальной загрузке страницы.
В HTML-формах нельзя реализовать подменю. JavaScript позволяет обойти это ограничение и реализовать замену, путем программирования поля Select:
Заказ автомашин Горьковского и Волжского автозаводов
Фирма производитель:
ГАЗ
ВАЗ
Модель:
3102-111
3102-311
31021
3110
Сделан заказ на модель:
В данном примере список моделей автомобилей меняется в зависимости от выбора завода-производителя. Назначение и обновление списка построены по тому же принципу, что и в предыдущем примере с восстановлением значений умолчания, поэтому текст программ мы не приводим. Но с ним, естественно можно ознакомиться, если посмотреть на HTML-разметку этой страницы.
начало страницы
length
В примерах перепрограммирования options[] активно используется свойство объекта SELECT length. Оно определяет количество альтернатив определенных для поля выбора. При помощи этого свойства мы удаляли и восстанавливали списки моделей в примере с автомобилями.
Определим число моделей автомобилей Горьковского автозавода посредством этого свойства:
<form name=f3>
Число предложенных моделей: <nput name=i0 size=1 maxlength=1 onFocus="out();">
</form>
<script>
document.f3.i0.value=document.f2.s1.length;
</script>
Число предложенных моделей:
document.f3.i0.value=document.f2.s1.length;
Обратите внимание на контейнер SCRIPT. Он расположен вслед за формой. Если его расположить раньше, то поля формы будут не определены, и мы получим ошибку.
начало страницы
selectedIndex
Свойство объекта SELECT, которое возвращает значение выбранной альтернативы, обозначается как selectedIndex. Это свойство мы уже использовали в примере с автомобилями. Там по этому индексу мы определяли, модель которого из двух автозаводов выбирает пользователь:
<form>
Автозавод:
<select name=s0 onChange="form.elements[1].value=selectedIndex;">
<option>ГАЗ
<option>ВАЗ
</select>
Выбрали индекс:
<input size=1 maxlength=1>
</form>
Автозавод:
ГАЗ
ВАЗ
Выбрали индекс:
В этом примере обратите внимание на обработчики событий. Сам обработчик onChange мы опишем позже. Главное сейчас не это. Обратите внимание на то, как мы обращаемся к элементам текущей формы. Во-первых, мы используем свойство form объекта SELECT. Мы его специально не обсуждали. Оно указывает на объект FORM, к которому принадлежит поле. Во-вторых, мы ссылаемся на второй элемент формы. К данному моменту он не определен, но событие произойдет только тогда, когда будем выбирать альтернативы. К этому моменту поле уже будет определено. В-третьих, мы ссылаемся на selectedIndex, не указывая полного имени формы. В данном контексте он относится к текущей форме.
начало страницы
onChange
Событие change наступает в тот момент, когда изменяется значение выбранного индекса в объекте SELECT. С изменением этого индекса в полях выбора одной единственной альтернативы на данной странице мы сталкивались неоднократно(selectedIndex и options[]). Данное событие обрабатывается JavaScript-программой, которая указывается в атрибуте onChange контейнера SELECT. В этом контексте интересно посмотреть на то, что происходит, когда мы имеем дело с multiple контейнером select:
<form>
Набор канцелярских товаров:
<select
onChange=
"form.elements[1].value='';
for(i=0;i
if(form.elements[0].options[i].selected==true)
form.elements[1].value = form.elements[1].value+i;"
multiple>
<option>Карандаши
<option>Авторучки
<option>Линейки
<option>Тетради
<option>Стерки
<option>Кнопки
<option>Скрепки
</select>
Выбраны позиции:
<input name=s1 size=7 maxlength=7 onFocus="form.elements[1].blur();">
</form>
Набор канцелярских товаров: |
Карандаши Авторучки Линейки Тетради Стерки Кнопки Скрепки |
Выбраны позиции: |
начало страницы
selected
Свойство selected объекта OPTION, на котором был построен пример с канцелярскими принадлежностями, может принимать два значения: истина(true) или ложь(false). В примере мы распечатываем индекс выбранной альтернативы, если значение свойства selected у объекта OPTION - true:
if(form.elements[0].options[i].selected==true) ...
Вообще говоря, свойство selected интересно именно в случае поля множественного выбора. В случае выбора единственной альтернативы ее можно получить указанием на свойство selectedIndex объекта SELECT.
начало страницы
text
Свойство text представляет собой отображаемый в меню текст, который соответствует альтернативе:
<select
onChange=
"form.elements[2].value=form.elements[0].options
[form.elements[0].selectedIndex].text;"
>
...
</select>
Список канцелярских принадлежностей:
Карандаши
Авторучки
Линейки
Тетради
Стерки
Кнопки
Скрепки
Выбрали из списка:
В данном примере свойство text выводится в текстовое поле формы.
Src
Размещение кода на HTML-странице.
Главный вопрос любого начинающего программиста: "Как оформить программу и выполнить ее?", или другими словами: "Куда кобылу запрягать?". Попробуем на него ответить как можно проще, но при этом не теряя полноты способов применения JavaScript-кода.
Во-первых, исполняет JavaScript-код браузер. В него встроен интерпретатор JavaScript. Следовательно, выполнение программы зависит от того, когда и как этот интерпретатор получает управление. Это, в свою очередь зависит от функционального применения кода .
В общем случае можно выделить четыре способа функционального применения JavaScript:
гипертекстовая ссылка (схема URL)
обработчик события (handler)
подстановка (entity)(в Microsoft IE не реализована)
вставка (контейнер SCRIPT)
В учебниках по JavaScript обычно начинают описание применения JavaScript с контейнера SCRIPT. Но с точки зрения самого программирования это не совсем правильно, т.к. такой порядок не дает ответа на ключевой вопрос: Как JavaScript-код получает управление? Т.е. каким образом вызывается и исполняется программа, написанная на JavaScript и размещенная в HTML-документе.
В зависимости от профессии автора HTML-страницы и уровня его знакомства с основами программирования возможны несколько вариантов начала освоения JavaScript. Если Вы программист классического толка (С, Fortran, Pascal и т.п.), то проще всего начинать с программирования внутри тела документа, если Вы привыкли программировать под Windows, то в этом случае начинайте с программирования обработчиков событий, если вы имеете только опыт HTML-разметки или давно не писали программ, то тогда лучше начать с программирования гипертекстовых переходов.
URL-схема JavaScript
Схема URL(Uniform Resource Locator) - это один из ключевых элементов Web-технологии. Каждый информационный ресурс в Web имеет свой уникальный URL. URL указывают в атрибуте href контейнера A, в атрибуте src контейнера IMG, в атрибуте action контейнера FORM и т.п.. Все URL подразделяются на схемы доступа, которые зависят от протокола доступа к ресурсу, например, для доступа к FTP-архиву применяется схема ftp, для доступа к Gopher-архиву - схема gopher, для отправки электронной почты - схема smtp. Тип схемы определяется по первому компоненту URL:
http://kuku.ru/directory/page.html
В данном случае URL начинается с http - это и есть определение схемы доступа(схема http).
Основной задачей языка программирования гипертекстовой системы является программирование гипертекстовых переходов. Это означает, что при выборе той или иной гипертекстовой ссылки вызывается программа реализации гипертекстового перехода. В Web-технологии стандартной программой является программа загрузки страницы. JavaScript позволяет заместить стандартную программу на программу пользователя. Для того чтобы отличить стандартный переход по протоколу HTTP от программируемого на JavaScript перехода, разработчики языка ввели в употребление новую схему URL - javascript:
<a href="javascript:JavaScript_код">...</a>
<img src="javascript:JavaScript_код>
В данном случае текст "JavaScript_код" обозначает программы-обработчики на JavaScript, которые вызываются при выборе гипертекстовой ссылки в первом случае и при загрузке картинки во втором.
Например, при нажатии на гипертекстовую ссылку Внимание!!! можно получить окно предупреждения:
<a href="javascript:alert('Attention!!!');"><font color=red>Внимание!!!</font></a>
или при нажатии на кнопку типа Submit в форме можно заполнить текстовое поле этой же формы:
<form name=f method=post action="javascript:window.document.f.i.value='Нажали кнопку Click';void(0);">
<table>
<tr>
<td><input name=i>
<td><input type=submit value=Click>
<td><input type=reset value=Reset>
</table>
</form>
Таким образом, при программировании гипертекстового перехода интерпретатор получает управление после того, как пользователь "кликнул" по гипертекстовой ссылке.
начало страницы
Обработчики событий
Программы обработчики событий(handler) указываются в атрибутах контейнеров, с которыми эти события связаны. Например, при нажатии на кнопку происходит событие Click:
<form><input type=button value=Кнопка onClick="window.alert('Yahoo!!!');"></form>
В данном примере атрибут onClick определяет программу обработки события Click. Аналогично можно обработать изменение данных в поле меню:
<form>
<select name=s1 onChange="
window.alert(
document.s.s1.options[document.s.s1.selectedIndex].text
);">
<option>Привет
<option>Пошел вон
</form>
Привет
Пошел вон
В этом примере при выборе альтернативы она(альтернатива) отображается в окне предупреждения. При этом если не происходит смены альтернативы, то окно не появляется, если же был сделан новый выбор, то окно появляется.
Обработчики событий можно указать внутри многих HTML-контейнеров(BODY, IMG, A, FORM и т.п.). При этом особой популярностью пользуются атрибуты onLoad и onUnload контейнера BODY, т.к. позволяют определить действия после загрузки страницы или при переходе на другую страницу.
Таким образом, интерпретатор получает управление после того, как происходит событие, вызванное действиями пользователя, и для которого определен обработчик события.
начало страницы
Подстановки
Подстановка (entity) довольно редко встречается на страницах Web. Тем не менее, это достаточно мощный инструмент генерации HTML-страницы на стороне браузера. Подстановки используются в качестве значений атрибутов HTML-контейнеров. Например, как значение умолчания поля формы, определяющего домашнюю страницу пользователя, будет указан URL текущей страницы:
<script>
function l()
{
str = window.location.href;
return(str.length);
}
</script>
<form><input value="&{window.location};" size="&{l();};"></form>
Подстановки не поддерживаются в Internet Explorer 4.0, поэтому пользоваться ими следует аккуратно. Прежде чем выдать браузеру страницу с подстановками следует проверить тип этого браузера.
В случае подстановки интерпретатор получает управление в момент разбора браузером(компонента parser) HTML-документа. Как только parser натыкается на конструкцию &{..} у атрибута контейнера, он передает управление интерпретатору JavaScript, который, в свою очередь, после исполнения кода это управление parser-у возвращает. Таким образом, эта операции аналогична подкачке графики на HTML-страницу.
начало страницы
Вставка(Контейнер SCRIPT - принудительный вызов интерпретатора)
Контейнер SCRIPT - это развитие подстановок до возможности генерации текста документа JavaScript-кодом. В этом смысле применение SCRIPT аналогично Server Site Includes, т.е. генерации страниц документов на стороне сервера. Однако здесь мы забежали чуть-чуть вперед. При разборе документа HTML-parser передает управление интерпретатору после того, как встретит таг начала контейнера SCRIPT. Интерпретатор получает на исполнение весь фрагмент кода внутри контейнера SCRIPT и возвращает управление HTML-parser-у для обработки текста страницы после тага конца контейнера SCRIPT.
У контейнера SCRIPT две основные функции:
Размещение кода внутри HTML-документа
Условная генерация HTML-разметки на стороне браузера
Первая функция аналогична декларированию переменных и функций, которые потом можно будет использовать в качестве программ переходов, обработчиков событий и подстановок. Вторая - это подстановка результатов исполнения JavaScript-кода в момент загрузки или перезагрузки документа.
Размещение кода внутри HTML-документа
Собственно особенного разнообразия в размещении кода нет. Его можно разместить либо в заголовке документа, внутри контейнера HEAD, либо - внутри BODY. Последний способ и его особенности будут рассмотрены в "Условная генерация HTML-разметки на стороне браузера". Сосредоточимся поэтому на заголовке документа.
Код в заголовке размещается внутри контейнера SCRIPT:
<html>
<head>
<script language=JavaScript>
<!-- Это комментарий
...JavaScript-код...
// -->
</script>
<body>
... Тело документа ...
</body>
</html>
HTML- комментарии здесь вставлены для защиты от интерпретации данного фрагмента страницы HTML-parser-ом в старых браузерах(у высокого начальства еще встречаются :-)). В свою очередь, конец HTML-комментария защищен от интерпретации JavaScript-интерпретатором(// в начале строки). Кроме этого, в качестве значения атрибута language у тага начала контейнера указано значение "JavaScript". VBScript, который является альтернативой JavaScript - это скорее экзотика, чем общепринятая практика, поэтому этот атрибут можно опустить - значение "JavaScript" принимается по умолчанию.
Очевидно, что размещать в заголовке документа генерацию текста страницы бессмысленно - он не будет отображен браузером. Поэтому в заголовок помещают декларации общих переменных и функций, которые будут затем использоваться в теле документа. При этом браузер Netscape более требовательный и более строгий, чем Explorer. Если не разместить описания функции в заголовке, то при ее вызове в теле документа можно получить ошибку о том, что данная функция не определена.
Приведем пример размещения и использования функции:
<html>
<head>
<script>
function time_scroll()
{
d = new Date();
window.status = d.getHousrs()+":"+d.getMinutes()+":"+d.getSconds();
setTimeout('time_scroll();';500);
}
</script>
</head>
<body onLoad=time_scroll()>
<center>
<h1>Часы в строке статуса</h1>
<form>
<input type=button value="Закрыть окно" onClick=window.close()>
</form>
</center>
</body>
</html>
В этом примере мы декларировали функцию time_scroll() в заголовке документа, а потом вызвали ее как обработчик события Load в таге начала контейнера BODY(onLoad=time_scroll()).
В качестве примера декларации переменной рассмотрим изменения статуса окна-потомка из окна-предка:
<input type=button value="Изменить поле статуса в окне примера" onClick="id.defaultStatus='Привет';id.focus();">
При открытии окна-потомка мы в переменную id поместили указатель на объект окно id=window.open(). Теперь мы ее можем использовать как идентификатор объекта класса window. Использование id.focus() в нашем случае обязательно. При нажатии на кнопку "Изменить поле статуса в окне примера" происходит передача фокуса в родительское окно. Оно может иметь размер всего экрана. При этом изменения будут происходить в окне-потомке, которое будет скрыто родительским окном. Для того чтобы изменения увидеть, надо передать фокус. Переменная id должна быть определена за пределами каких-либо функций. В этом случае она становится свойством окна. Если мы ее разместим внутри функции открытия дочернего окна, то потом не сможем к ней обратиться из обработчика события Click.
Условная генерация HTML-разметки на стороне браузера
Всегда приятно, когда с сервера мы получаем страницу, подстроенную под возможности нашего браузера или, более того, под пользователя. Существует только две возможности генерации таких страниц: на стороне сервера или непосредственно у клиента. JavaScript-код исполняется на стороне клиента(вообще говоря, это совсем не так. Серверы компании Netscape способны исполнять JavaScript-код и на стороне сервера, только в этом случае он носит название LiveWire-код. Не путать с LiveConnect), поэтому рассмотрим только генерацию на стороне клиента.
Для генерации HTML-разметки контейнер SCRIPT размещают в теле документа. Простой пример - встраивание в страницу локального времени:
<body>
...
<script>
d = new Date();
document.write("<br>");
document.write("Момент загрузки страницы:"+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds());
document.write("<br>");
</script>
...
<body>
d = new Date();
document.write("
");
document.write("Момент загрузки страницы: "+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds());
document.write("
State
Операторы
В этом разделе мы рассмотрим основные операторы JavaScript. Основное внимание при этом мы уделим операторам декларирования и управления потоком вычислений. Без них не может быть написана ни одна JavaScript программа.
Общий перечень этих операторов выглядит следующим образом:
var
{...}
if
while
for
for ... in
break
continue
return
Сразу оговоримся, что этот список не является полным списком операторов JavaScript.
var
Оператор var служит для объявления переменной. При этом переменная может принимать значения любого из разрешенных типов данных. На практике довольно часто обходятся без явного использования var. Переменная соответствующего типа создается путем простого присваивания:
var a;
var a=10;
var a = new Array();
var a = new Image();
Все выше перечисленные примеры использования var верны и могут быть применены в JavaScript программе. Область действия переменной определяется блоком (составным оператором), в котором используется переменная. Максимальная область действия переменной - страница.
начало страницы
{...}
Фигурные скобки определяют составной оператор JavaScript - блок. Они одновременно ограничивают область действия переменных, которые определены внутри этих скобок. За пределами блока переменные не видны:
{
var kuku=0;
}
Основное назначение блока - определение тела цикла и тела условного оператора.
начало страницы
if
Условный оператор применяется для ветвления программы по некоторому логическому условию. Общий синтаксис:
if(логическое выражение) оператор1; [else оператор2;]
Логическое выражение - это выражение, которое принимает значение true или false. Если оно равно true, то оператор1 исполняется. В квадратных скобках необязательная составляющая оператора if - альтернатива основной ветви вычислений:
if(navigator.appName=="Netscape")
{
window.location.href=http://kuku.ru/netscape.htm;
}
else
{
window.location.href=http://kuku.ru/explorer.htm;
}
Примеры использования условного оператора можно найти, например, в разделе "Тип браузера".
начало страницы
while
Оператор while определяет цикл. Определяется он в общем случае следующим образом:
while(логическое выражение)
оператор;
Оператор, в том числе и составной, - тело цикла. Тело исполняется до тех пор, пока верно логическое условие:
while(flag==0)
{
id=setTimeout("test();",500);
}
Обычно цикл этого типа применяют при выполнении периодических действий до некоторого события.
начало страницы
for
Оператор for - это еще один оператор цикла. В общем случае он имеет вид:
for(инициализация переменных цикла;условие;модификация переменных цикла)
оператор;
Оператор в теле цикла может быть блоком. Рассмотрим типовой пример использования этого оператора:
for(i=0;i<document.links.length;i++)
{
document.write(document.links[i].href+"<br>");
}
for(i=0;i");
}
Примеры подобного сорта разбросаны по всем разделам курса. Один из них расположен в разделе "Изменение картинки".
начало страницы
for ... in
Данный оператор позволяет "пробежаться" по свойствам объекта. Рассмотрим пример:
for(v in window.document)
{
document.write(v+"<br>");
}
Все свойства текущего объекта документ:
for(v in window.document)
{
document.write(v+":"+eval('document.'+v)+"
");
}
Данный документ состоит из нескольких разделов. Обращение "window.document" позволяет обратиться к общему документу, а не к отдельно взятому разделу. Поэтому распечатанные свойства - это свойства всего документа.
начало страницы
break
Оператор break позволяет досрочно покинуть тело цикла. Распечатаем только title документа:
for(v in window.document)
if(v=="title")
{
document.write(v+":"+eval('document.'+v)+"
");
break;
}
for(v in window.document)
if(v=="title")
{
document.write("Результат:
");
document.write(v+":"+eval('document.'+v)+"
");
break;
}
В пример распечатки свойств объекта document мы вставили break при просмотре свойства title и получили искомый результат.
начало страницы
continue
Тот же самый результат, что и при использовании break можно было бы достичь при помощи оператора continue:
for(v in window.document)
{
if(v!="title") continue;
document.write(v+":"+eval('document.'+v));
break;
}
for(v in window.document)
{
if(v!="title") continue;
document.write("Результат:
");
document.write(v+":"+eval('document.'+v)+"
");
break;
}
Этот оператор позволяет пропустить часть тела цикла (от оператора до конца тела) и перейти к новой итерации. Таким образом, мы просто пропускаем все свойства до title и после этого выходим из цикла.
начало страницы
Оператор return используют для возврата значения из функции или обработчика события(см. разделы "Поле статуса" "Обмен данными"). Рассмотрим пример:
<form>
<input type=submit value=Submit onClick="return false;">
</form>
В данном примере return используется для маскирования передачи данных на сервер.
Status
Поле статуса(строка статуса, status bar)
Поле статуса - это первое, что начали использовать авторы HTML-страниц из арсенала JavaScript. Калькуляторы, игры, математические вычисления, и т.п. упражнения выглядели слишком искусственно. На их фоне бегущая строка в поле статуса была настоящей изюминкой, которая могла действительно привлечь внимание пользователей к Web-узлу. Постепенно ее популярность сошла на нет. Бегущие строки стали редкостью, но программирование поля статуса встречается на многих Web-узлах.
Полем статуса(status bar) называют среднее поле нижней части окна браузера сразу под областью отображения HTML-страницы. В поле статуса отображается информация о состоянии работы браузера(загрузка документа, загрузка графики, завершение загрузки, запуск апплета и т.п.). Программа на JavaScript имеет возможность работать с этим поле как с изменяемым свойством окна. При этом фактически с этим полем связаны два разных свойства:
window.status
window.default.Status
Разница между ними заключается в том, что браузер на самом деле имеет несколько состояний, которые связаны с некоторыми событиями. Состояние браузера отражается сообщением в поле статуса. По большому счету, существует только два состояния: нет никаких событий (defaultStatus) и происходят какие-то события(status).
Программируем status
Свойство status связано с отображением сообщений о событиях, отличных от простой загрузки страницы. Например, когда мышь проходит над гипертекстовой ссылкой, то URL, указанный в атрибуте href, отображается в поле статуса. При попадании мыши на поле свободное от ссылок в поле статуса восстанавливается сообщение умолчания(Document:Done). Эта техника реализована на данной странице при переходе на описание свойств status и defaultStatus:
<a href=#status onMouseover="window.status='Jump to status description';return true;" onMouseout="window.status='Status bar programming';return true;">window.status</a>
В документации по JavaScript указано, что обработчик событий Mouseover и Mouseout должен возвращать значение true. Это нужно для того, чтобы браузер не выполнял действий по умолчанию. Проверка показывает, что Navigator 4.0 прекрасно обходится и без возврата значения true.
Другой пример программирования поля статуса - динамическое обновление значения этого поля. Например, отображение текущей даты и времени:
Если нажать на кнопку "Запустить Часы", то в поле статус будет отображаться текущее время. Если нажать на кнопку "Остановить Часы", то в поле статуса снова восстановится сообщение умолчания. Если начать двигать мышь в поле браузера по областям, в которых нет гипертекстовых ссылок, то время будет все время перекрываться сообщением умолчания, т.е. будет вместо свойства status отображаться свойство defaultStatus в поле статуса. Статус отображается только в момент запуска потока, который подготовлен к выполнению функцией setTimeout().
начало страницы
Программируем defaultStatus
Свойство defaultStatus определяет текст, отображаемый в поле статуса, когда никаких событий не происходит. В нашем документе мы определили его в момент загрузки документа:
<body onLoad="window.defaultStatus='Status bar programming';">
Это сообщение появляется в момент, когда загружены все компоненты страницы (текст, графика, апплеты и т.п.). Оно восстанавливается в строке статуса после возврата из любого события, которое может произойти в момент просмотра документа. Любопытно, что движение мыши по свободному от гипертекстовых ссылок полю страницы приводит к постоянному отображению defaultStatus.
Submenu
Вложенные меню
При обсуждении программирования форм отмечено, что в HTML нет стандартного способа реализации вложенных меню. Тем не менее, за счет графики можно реализовать их подобие. При этом следует понимать, что место, на которое ложится графика, нельзя занять текстом:
<script>
function submenu(a)
{
if(a==1)
{
document.menu00.src="../images/jsi/historyb.gif"; // History
...
document.menu01.src="../images/jsi/faceb.gif"; // In face
...
}
...
</script>
<table cellspacing=0 cellpadding=0 align=center>
<tr>
<td><a href="javascript:void(0);"
onMouseover="submenu(1);return true;"
><img name=menu00 src=../images/jsi/historyb.gif border=0></a></td>
<td><img name=menu01 src=../images/jsi/faceb.gif border=0></td>
</tr>
...
</table>
onMouseover="submenu(1);return true;"
> |
|
onMouseover="submenu(2);return true;"
> |
|
onMouseover="submenu(3);return true;"
> |
В этом примере вложенное меню расположено справа от основного. Эффект вложенности достигается за счет изменения цвета. Подчиненность меню можно подчеркнуть изменением его положения относительно основного меню:
onMouseover="submenu1(1);return true;"
> |
|
onMouseover="submenu1(2);return true;"
> |
|
onMouseover="submenu1(3);return true;"
> |
|
onMouseover="submenu1(3);return true;"
> |
|
onMouseover="submenu1(3);return true;"
> |
В этом случае для продвижения меню вниз необходимо зарезервировать место при помощи невидимых или видимых картинок. При этом это не обязательно иллюстративные картинки, которые не несут никакой нагрузки. На главной странице цикла "Web-инжиниринг" меню открывается прямо по существующим ссылкам, изменяя при этом их содержание.
начало страницы
Submit
Обмен данными
Передача данных на сервер из формы происходит по событию submit. Это событие происходит при одном из следующих действий пользователя:
нажата кнопка Submit
нажата графическая кнопка
нажата клавиша Enter в форме из одного поля
вызван метод Submit
При описании отображения контейнера FORM на объекты JavaScript мы подробно описали обработку события submit. В данном разделе мы сосредоточимся на сочетании JavaScript-программ в атрибутах полей и обработчиках событий. Особое внимание уделим возможности перехвата/генерации события submit.
Кнопка Submit
Кнопка submit - это разновидность поля ввода. Она ведет себя так же, как и обычная кнопка, но только при этом генерирует событие submit(передачу данных на сервер). В этом, с точки зрения JavaScript-программирования, она абсолютно идентична графическим кнопкам:
<form>
<input type=submit value=submit>>
</form>
В этом примере мы просто перезагружаем страницу.
С точки зрения программирования наибольший интерес представляет собой возможность перехвата события submit и выполнение при этом действий, отличных от стандартных. Для этой цели у кнопки есть атрибут обработки события click(onClick):
<form>
<input type=submit value=Submit onClick="return false;">
</form>
Из этого примера видно, что кнопка submit ведет себя несколько иначе, чем графическая кнопка в Netscape Navigator, но также как графическая кнопка в Internet Explorer(различия со временем наверняка исчезнут :-)). При нажатии на кнопку перезагрузки страницы не происходит - передача данных на сервер отменена. Обработчик работает так же, как и обработчик события submit в контейнере FORM.
Теперь можно написать свою собственную программу обработки события submit:
function my_submit()
{
if(window.confirm("Do you wona to reload page?")) return true;
else return false;
}
...
<form>
<input type=submit value=Submit onClick="return my_submit();">
</form>
Если согласиться с перезагрузкой страницы, то она действительно будет перезагружена, при отказе (cancel) - вы вернетесь в текущую страницу без перезагрузки. Действия могут быть и более сложными. В любом случае, если функция обработки возвращает значение true, то передача данных на сервер(в нашем случае перезагрузка страницы) происходит, в противном случае (значение false) - данные не передаются.
начало страницы
Единственное поле в форме
Если в форме присутствует одно единственное поле, и мы в него осуществили ввод и после этого нажали на кнопку клавиатуры Enter, то браузер сгенерирует событие submit:
<form onSubmit="window.alert('Data submited');return false;">
<input size=10 maxlength=10>
</form>
Перехватить такое событие и обработать можно только за счет программы обработки события submit в контейнере FORM, как это и сделано в примере.
Нужно что-то делать
Ничего не надо делать
В этом примере кроме поля ввода в форме присутствует меню. Если менять значения выбранных альтернатив, то перезагрузки не происходит, но стоит изменить значение в поле ввода и нажать Enter, происходит submit и мы получаем окно предупреждения.
начало страницы
Метод submit()
Метод submit() - это метод формы. Если в программе вызывается метод submit, то данные из формы, к которой применяется данный метод, передаются на сервер. Усовершенствуем пример с полем ввода и меню выбора(прежде чем выбирать альтернативы прочтите комментарий под примером):
<form onSubmit="window.alert('Data submited');return false;">
<input size=10 maxlength=10>
<select onChange="form.submit();">
<option>Нужно что-то делать<option>Ничего не надо делать</select>
</form>
Нужно что-то делатьНичего не надо делать
При выборе альтернативы пользователь сразу инициирует обмен данными с сервером. Событие submit в данном случае обработчиком событий не перехватывается в отличие от нажатия Enter. Такое поведение браузера довольно логично. Если программист вызвал метод submit(), то, наверное, он предварительно проверил данные, которые отправляет на сервер.
Table
Графика и таблицы
Одним из наиболее популярных приемов дизайна страниц Web-узла является техника нарезки картинок на составные части. Можно выделить следующие способы применения этой техники для организации навигационных компонентов страницы:
Горизонтальные и вертикальные меню
Вложенные меню
Навигационные графические блоки
Главной проблемой при использовании нарезанной графики является защита ее от контекстного форматирования страницы HTML-parser-ом. Дело в том, что он автоматически переносит элементы разметки на новую строку, если они не помещаются в одной строке. Нарезанная картинка требует совершенно определенного расположения своих составных частей, поэтому простое их перечисление в ряд не дает желаемого эффекта:
<img src=../images/jsi/topm000.gif><img src=../images/jsi/topm001.gif>...
Элементы переносятся на новую строку, т.к. ширина раздела меньше общей ширины всех картинок. Проблема решается если применить защиту от parser-а - <pre>:
<pre>
<img src=../images/jsi/topm000.gif><img src=../images/jsi/topm001.gif>...
</pre>
Использование такого меню требует определения на нем гипертекстовых ссылок, что приводит к следующему эффекту:
<pre>
<a href="javascript:void(0);"><img src=../images/jsi/topm000.gif></a><a href="javascript:void(0);"><img src=../images/jsi/topm001.gif></a>...
</pre>
Это можно решить за счет применения атрибута border равного 0:
<pre>
<a href="javascript:void(0);"><img src=../images/jsi/topm000.gif border=0></a><a href="javascript:void(0);"><img src=../images/jsi/topm001.gif border=0></a>...
</pre>
Теперь попробуем тем же способом реализовать многострочное меню:
<pre>
<img src=../images/main/treeup.gif width=20 height=20 border=0><
<img src=../images/main/treetc.gif width=20 height=20 border=0><a href="javascript:void(0);"<>img src=../images/jsi/manual.gif border=0 width=20 height=20></a>
<img src=../images/main/treetc.gif border=0 width=20 height=20><a href="javascript:void(0);"><img src=../images/jsi/desk.gif border=0 width=20 height=20></a>
</pre>
Сплошной картинки не получается, т.к. высота строки не равна высоте картинки. Подогнать эти параметры практически нельзя. Каждый пользователь настраивает браузер по своему вкусу. Решение заключается в использовании таблицы:
<table cellpadding=0 cellspacing=0 align=center>
<tr>
<td><img src=../images/main/treeup.gif width=20 height=20 border=0></td>
<td><img src=../images/main/blank.gif width=20 height=20 border=0></td>
</tr>
<tr>
<td><img src=../images/main/treetc.gif width=20 height=20 border=0></td>
<td><a href="javascript:void(0);"><img src=../images/jsi/manual.gif border=0 width=20 height=20></a></td>
</tr>
<tr>
<td><img src=../images/main/treetc.gif width=20 height=20 border=0></td>
<td><a href="javascript:void(0);"><img src=../images/jsi/desk.gif border=0 width=20 height=20></a></td>
</tr>
</table>
Taint
Модель безопасности
При программировании на JavaScript потенциально существует возможность доступа из программы к персональной информации пользователя. Эта проблема есть всегда, когда нечто запускается на компьютере и это нечто имеет возможность самостоятельно организовать обмен данными по сети с удаленным сервером.
От версии к версии управление защитой таких данных постоянно совершенствуется, но всегда нужно иметь в виду, что множество "следопытов" исследует эту проблему и постоянно открывает все новые и новые возможности обхода механизмов защиты.
Объясним только основные моменты в принципах защиты информации в JavaScript, а поиск потенциально слабых мест оставим в качестве домашнего задания для наиболее пытливых читателей.
По умолчанию к защищенным в JavaScript данным относятся:
Document | cookie, domain, forms[], lastModified, links[], location, referer, title, URL | ||
Form | action | ||
document.forms[].elements[] | checked, defaultChecked, defaultValue, name, selectedIndex, toString, value | ||
History | current,next,previous,toString(),all array elements | ||
Location, Link, ,Area | hash, host, hostname, href, pathname, port, protocol, search, toString() | ||
Option | defaultSelected, selected, text, value | ||
Window | defaultStatus,status |
Защищенными эти данные являются с той точки зрения, что не может получить значения соответствующих атрибутов. Главным образом речь здесь идет о программе, которая пытается получить доступ к данным, которые определены на другой странице, отличной от той, в рамках которой данная программа исполняется. Например, к данным из другого окна.
В настоящее время известно три модели защиты: запрет на доступ(Navigator 2.0), taint model (Navigator 3.0), защита через Java (Navigator 4.0). Рассмотрение этих моделей и приемы программирования - это отдельный сложный и трудоемкий вопрос, требующий знаний и навыков программирования на языке Java, поэтому в рамках данного курса мы его рассматривать не будем.
Отметим только, что к большинству свойств объектов текущей страницы и окна программист имеет доступ. Они становятся защищенными только в том случае, если относятся к документу в другом окне и загруженному из другого Web-узла. Поэтому ограничения, накладываемые системой безопасности JavaScript, достаточно гибкие и не очень сильно мешают разработке страниц с применением этого языка программирования.
Treejsi
Web-инжиниринг(Оглавление) |
Введение в JavaScript |
HTML-контейнеры как объекты программирования |
Размещение кода на HTML-странице |
Иерархия классов объектов JavaScript |
Программируем свойства окна браузера (6 часов) |
Поле статуса |
Поле location |
История посещений |
Тип браузера |
Управление окнами |
Фреймы |
Программируем формы(6 часов) |
Текст в полях ввода |
Списки и падающие меню |
Кнопки |
Картинки |
Обмен данными |
Cookies |
Программируем картинки(6 часов) |
Изменение картинки |
Мультипликация |
Оптимизация отображения |
Графика и таблицы |
Графика и обработка событий |
Вертикальные и горизонтальные меню |
Вложенные меню |
Навигационные графические блоки |
Программируем гипертекстовые переходы(6 часов) |
Массивы встроенных ссылок |
Замена атрибута href |
Изменение части URL |
Обработчики onMouseover и onMouseout |
Обработчик onClick |
Схема URL - JavaScript |
Imagemap |
Программируем "за кадром"(6 часов) |
Типы и структуры данных |
Массивы |
Функции |
Объекты |
Операторы языка |
Управление фокусом |
Передача данных из форм |
Невидимый код |
Модель безопасности |
u="u686.25.spylog.com";d=document;nv=navigator;na=nv.appName;p=1; bv=Math.round(parseFloat(nv.appVersion)*100); n=(na.substring(0,2)=="Mi")?0:1;rn=Math.random();z="p="+p+"&rn="+rn;y=""; y+=""; y+="
"; y+=""; d.write(y);if(!n) { d.write("Конспект
Url
Схема URL- "javascript:..."
Для программирования гипертекстовых переходов в спецификацию Универсального Идентификатора Ресурсов разработчики JavaScript ввели отдельную схему по аналогии со схемами http, ftp и т.п. - javascript. Эта схема URL упоминается в разделе "Размещение JavaScript-кода" в контексте передачи управления JavaScript-интерпретатору от HTML-parser-а. Кроме того, программирование гипертекстового перехода рассмотрено в разделе Обработка события Click. Теперь мы рассмотрим более общий случай обработки события гипертекстового перехода при выборе гипертекстовой ссылки.
Схема URL javascript в общем виде выглядит следующим образом:
<a href="javascript:...;">...</a>
<form action="javascript:...">
Одним словом, в любом месте, где мы используем URL, вместо любой из стандартных схем можно применить схему javascript. Единственное исключение составляет контейнер IMG. URL в нем используется в атрибуте src. Принять определенное значение src может либо при помощи назначения в IMG, либо при помощи обращения к свойству img. По большому счету, применение JavaScript в src может только проинициализировать картинку. Дальнейшее ее изменение описано в разделе "Программируем графику". Рассмотрим пример простой гипертекстовой ссылки:
<a
href="javascript:window.alert('window.alert() function changes an ordinal href');void(0);">
Заместили обычную ссылку
</a>
Заместили обычную ссылку
Можно выполнить аналогичную операцию, но над картинкой:
var flag=0;
function ichange()
{
if(flag==0)
{
document.i1.src="../images/jsi/tiger1s.gif"; flag=1;
}
else
{
document.i1.src="../images/jsi/tiger1g.gif"; flag=0;
}
}
...
<a href="javascript:ichange();void(0);">
<img name=i1 src=../images/jsi/tiger1g.gif border=0>
</a>
Если постоянно выбирать тигра, то картинка будет то становиться цветной, то, наоборот, обесцвечиваться.
Попробуем теперь выполнить JavaScript-код применительно к контейнеру FORM:
Введите текст для отображения в окне и нажмите ввод:
<form name=f action="javascript:window.alert(document.f.fi0.value);void(0);" method=post>
Введите текст для отображения в окне и нажмите ввод:
<input name=fi0 size=20 maxlength=20>
</form>
Следует при этом заметить, что все-таки использование схемы javascript в этом месте HTML-разметки выглядит несколько "коряво". Для того чтобы все работало так, как предполагается автором, приходится использовать метод post. Гораздо логичнее выглядит применение обработчика события onSubmit.
nThis file was not retrieved
Wcontrol
Управление окнами
Что можно сделать с окном? - Открыть(создать), закрыть(удалить), положить его поверх всех других открытых окон(передать фокус). Кроме того, можно управлять свойствами окна и свойствами подчиненных ему объектов. Описанию основных свойств посвящены все странички раздела "Программируем свойства окна браузера", поэтому сосредоточимся на простых и наиболее популярных методах окна:
alert()
confirm()
prompt()
open()
close()
focus()
setTimeout()
clearTimeout()
Здесь не указаны только два метода: scroll() и blur().
Первый позволяет продернуть окно на определенную позицию. Но его очень сложно использовать, не зная координат окна. Последнее является обычным делом, если только не используется технология программирования слоев или pcss.
Второй метод уводит фокус с окна. При этом совершенно не понятно, куда этот фокус будет передан. Гораздо проще целенаправленно передать фоку, чем его просто потерять.
window.alert()
Метод alert() позволяет выдать окно предупреждения:
<a href="javascript:window.alert('Кара-у-у-ул!!!')">Во дворе злая собака</a>
Во дворе злая собака
Все очень просто, но нужно иметь в виду две вещи: во-первых, сообщения выводятся системным фонтом, следовательно, для предупреждений на русском языке нужна локализованная версия ОС, и, во-вторых, как это вообще принято в JavaScript, нельзя выдавать сообщения с буквой "я". Такие сообщения приводят к перманентной ошибке браузера.
начало страницы
window.confirm
Метод confirm() позволяет задать пользователю вопрос, на который тот может ответить либо положительно, либо отрицательно:
<form>
<input type=button value="Что вы знаете о JavaScript?"
onClick="
if(window.confirm('Знаю все')==true)
{ document.forms[0].elements[1].value='Проверка на вшивость';}
else
{document.forms[0].elements[1].value='Знал бы - не читал';};"><br>
<input size=30>
</form>
Все ограничения для сообщений на русском языке, которые были описаны для метода alert() справедливы и для метода confirm().
начало страницы
window.prompt
Метод prompt() позволяет принять от пользователя короткую строку текста, которую он набирает в поле ввода информационного окна:
<form>
<input type=button value="Открыть окно ввода"
onClick=
"document.forms[1].elements[1].value=window.prompt('Введите чего-нибудь Христа ради!');">
<input size=30>
</form>
Введенную пользователем строчку можно присвоить любой переменной и потом ее разбирать в JavaScript-программе.
начало страницы
window.open
У этого метода окна атрибутов больше, чем у некоторых объектов. Метод предназначен для создания новых окон. В общем случае его синтаксис выглядит следующим образом:
open("URL","window_name","param,param,...",replace);
где -
URL - страница, которая будет загружена в новое окно,
window_name - имя окна, которое можно использовать в атрибуте target в контейнерах A и FORM,
params - список параметров:
width | ширина окна в пикселях |
height | высота окна в пикселях |
toolbar | создает окно с системными кнопками браузера |
location | создает окно с полем location |
directories | создает окно с меню предпочтений пользователя |
status | создает окно с полем статуса status |
menubar | создает окно с меню |
scrollbar | создает окно с линейками прокрутки |
resizable | создает окно, размер которого можно будет изменять после создания |
Если вы не поленитесь и проверите все гипертекстовые ссылки в таблице параметров, то получите представление о работе каждого из них.
начало страницы
window.close
Метод close() - это оборотная сторона медали метода open(). Он позволяет закрыть окно. Наиболее часто встает вопрос о том, а которое из окон собственно следует закрыть. Если необходимо закрыть текущее окно, то:
window.close();
self.close();
Если необходимо закрыть родительское окно, т.е. окно, из которого было открыто текущее окно, то:
window.opener.close();
Если необходимо закрыть произвольное окно, то тогда сначала нужно получить его идентификатор,:
id=window.open();
...
id.close();
Как видно из последнего примера, закрывают окно не по имени(значение атрибута target тут совершенно не уместно), а используют указатель на объект.
начало страницы
windows.focus
Метод focus() применяется для передачи фокуса в окно, с которым он использован. Передача фокуса полезна как при открытии окна, так и при его закрытии, не говоря уже о случаях, когда нужно выбирать окна. Рассмотрим пример.
В нем откроем окно и, не закрывая его, снова откроем окно с таким же именем, но с другим текстом. Новое окно не появилось по верх основного окна, т.к. фокус ему не был передан. Теперь повторим открытие окна, но теперь с передачей фокуса:
function myfocus(a)
{
id = window.open("","example","scrollbars,width=300,height=200");
if(a==1)
{
id.document.open();
id.document.write("<center>Открыли окно в первый раз");
}
if(a==2)
{
id.document.open();
id.document.write("<center>Открыли окно во второй раз");
}
if(a==3)
{
id.focus();
id.document.open();
id.document.write("<center>Открыли окно во второй раз");
}
id.document.write("<form><input type=button onClick='window.close();' value='Закрыть окно'></center>");
id.document.close();
}
Поскольку мы пишем содержание нового окна из окна старого(родителя), то в качестве указателя на объект используем значение переменной id.
начало страницы
window.setTimeout
Метод setTimeout() используется для порождения нового потока вычислений, исполнение которого откладывается на время(ms), указанное вторым аргументом:
idt = setTimeout("JavaScript_код",Time);
Типовое применение этой функции - организация автоматического изменения свойств объектов. Например, можно запустить часы в поле формы:
Текущее время:
var flag=0;
var idp=null;
function myclock()
{
if(flag==1)
{
d = new Date();
window.document.c.f.value = d.getHours()+":"+d.getMinutes()+":"+d.getSeconds();
}
idp=setTimeout("myclock();",500);
}
function flagss()
{
if(flag==0) flag=1; else flag=0;
}
...
<form name=c>
Текущее время:<input name=f size=8><input type=button value="Start/Stop" onClick=flagss()>
</form>
Обратите внимание на то, что поток порождается в данном случае всегда, даже в том случае, когда часы стоят. Если бы его порождали только при значении переменной flag равном единице, то при значении 0 он исчез бы навсегда, и при нажатии на кнопку часы продолжали бы стоять.
начало страницы
window.clearTimeout()
Метод clearTimeout() позволяет уничтожить поток, порожденный методом setTimeout(). Очевидно, что его применение позволяет более рачительно использовать ресурсы вычислительной установки. Для того чтобы использовать этот метод в примере с часами, нам нужно модифицировать функции и форму:
Текущее время:
var idp1 = null;
function start()
{
d = new Date();
window.document.c1.f1.value = d.getHours()+":"+d.getMinutes()+":"+d.getSeconds();
idp1=setTimeout("start();",500);
}
function stop()
{
clearTimeout(idp1);idp1=null;
}
...
<form name=c1>
Текущее время:<input name=f1 size=8>
<input type=button value="Start" onClick="if(idp1==null)start();">
<input type=button value="Stop" onClick="if(idp1!=null)stop();">
</form>
В данном примере для остановки часов используется метод clearTimeout(). При этом, чтобы не порождалось множество потоков, проверяется значение указателя на объект потока.
Window
Программируем свойства окна браузера
Класс объектов Window - это самый старший класс в иерархии объектов JavaScript. К этому классу объектов относятся объект window и объект frame. Объект window ассоциируется с окном программы-браузера, а объект frame с окнами внутри окна браузера, которые порождаются последним при использовании автором HTML-страниц контейнеров FRAMESET и FRAME.
При программировании на JavaScript наиболее часто используют следующие свойства и методы объектов типа window:
statuslocationhistorynavigator | openclosefocus | Событий нет |
Объект window порождается только в момент открытия окна. Все остальные объекты, которые порождаются при загрузке страницы в окно, есть свойства объекта window. Таким образом, у window могут быть разные свойства при загрузке разных страниц.
u="u686.25.spylog.com";d=document;nv=navigator;na=nv.appName;p=1; bv=Math.round(parseFloat(nv.appVersion)*100); n=(na.substring(0,2)=="Mi")?0:1;rn=Math.random();z="p="+p+"&rn="+rn;y=""; y+=""; y+="
"; y+=""; d.write(y);if(!n) { d.write("Alignt
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Выравнивание
font-align | |||
text-align | |||
float | |||
vertical-align | |||
<span style="text-align:justify;">...</span> | |||
<p style="align:justify;">...</p> | |||
<div style="text-align:justify;">...</div> | |||
<p style="text-align:justify;">...</p> | |||
нельзя | |||
можно, но выглядит это не очень логично | |||
такого атрибута нет |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 8.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Bgcolort
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Цвет фона
text-background-color | |||
background-color | |||
block-background | |||
разницы нет | |||
для блочного элемента заливается установленным цветом весь блок, а для строкового только фрагмент текста | |||
для NN верен первый вариант ответа, а для IE - второй | |||
background-image | |||
background-position | |||
background-picture | |||
background-movie |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 9.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Bimaget
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Маркеры-картинки
list-style-type | |||
list-style-image | |||
list-style-url | |||
list-style-src | |||
none | |||
url(http://kuku.ru/kuku.gif) | |||
src(http://kuku.ru/kuku.gif) | |||
circle | |||
нельзя, т.к. нужно определить порядок элементов списка | |||
в NN нельзя, т.к. вообще произвольные картинки маркеров не поддерживаются | |||
в IE можно |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 7.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Blockprt
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Свойства блоков
color | |||
background | |||
margin | |||
width | |||
padding | |||
text-decoration | |||
можно применить | |||
нельзя применить | |||
можно применить в NN | |||
атрибутами margin и padding охватывающего блока | |||
атрибутами margin и padding вложенного блока | |||
атрибутом padding охватывающего блока и атрибутом margin вложенного блока | |||
относительной позицией вложенного блока |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 8.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Blockt
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Блочные и строковые элементы
DIV | |||
P | |||
A | |||
TD | |||
UL | |||
I | |||
I | |||
P | |||
B | |||
A | |||
TD | |||
DIV - блочный элемент разметки, а SPAN - строковый элемент разметки | |||
между ними нет разницы | |||
разница определяется особенностями браузера |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 8.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Bordert
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Граница (border)
border-top-width | |||
border-style | |||
border-bottom | |||
border-width | |||
border | |||
border:none | |||
border-width:0px | |||
border-style:invisible | |||
можно | |||
нет нельзя | |||
можно только в IE | |||
можно | |||
нет нельзя |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 10.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Bshapet
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Форма маркеров
нельзя, т.к. атрибут формы маркера применяется только к неупорядоченным спискам | |||
нельзя, т.к. в HTML не поддерживается нумерация буквами кириллицы | |||
можно, но это будут цифры и буквы | |||
list-style-image | |||
list-style-type | |||
list-style | |||
ol {list-style-type:circle;} | |||
ul {list-style:disk;} | |||
ol {list-style-type:upper-roman;} | |||
ul {list-style:none;} | |||
ul ol {list-style-type:lower-alpha;} |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 8.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Check
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Страница регистрации участников зачета
Для сдачи зачета необходимо быть зарегистрированным участником тестирования. Для регистрации в качестве участника зачета заполните форму. Обязательными полями являются "Login:", "Password:", "Подтвердить Password:","E-mail:". Фамилию, имя и отчетство можите не указывать.
Login: | |
Password: | |
Подтвердите Password: | |
Фамилия: | |
Имя: | |
Отчетство: | |
E-mail: |
Начать тестирование... ]
Результаты тестирования записываются в базу данных системы и высылаются по желанию участника тестирования по e-mail.
Зачет представляет из себя двадцать выбранных случайным образом вопросов из тех, что предсталены в разделе "Тесты". На выполнение зачета отводится 30 минут. Зачет сдан, если участник набирает 4/5 от максимального колличества баллов сгенерированного для него теста.
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Colort
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Управление цветом
color | |||
text-color | |||
background-color | |||
border-top-color | |||
border-color:#003366 | |||
border-top-color:superlightblue | |||
color:navy | |||
text properties | |||
block properties | |||
color and background properties | |||
эти атрибуты относятся к различным группам атрибутов CSS |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 7.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Coordt
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Координаты и размеры
абсолютную(absolute) | |||
относительную(relative) | |||
базовую(base) | |||
местную(local) | |||
сервера(server) | |||
приложения(application) | |||
нет такой координатной системы | |||
местоположение геометрического центра блока относительно верхнего левого угла рабочей области окна браузера | |||
местоположение верхнего левого угла прямоугольника блока относительно верхнего левого угла рабочей облаcти окна браузера | |||
координаты блока в системе координат Web-узла | |||
вниз | |||
вверх | |||
направление определяется дополнительным атрибутом | |||
нет такой системы координат | |||
от левого верхнего угла охватывающего блок элемента разметки | |||
от верхнего левого угла рабочей области браузера | |||
от точки расположения верхнего левого угла блока по умолчанию | |||
нет нельзя | |||
можно, но только в относительных координатах | |||
можно только в абсолютных координатах | |||
можно в любой из допустимых координатных систем | |||
position-x | |||
position-y | |||
left-top | |||
bottom-right | |||
top | |||
left | |||
bottom | |||
right | |||
width | |||
left-right | |||
right-offset | |||
top-offset | |||
height | |||
margin | |||
padding | |||
можно | |||
нельзя |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 26.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Familyt
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Гарнитура
тип шрифта | |||
набор начертаний | |||
начертание | |||
serif | |||
sans-serif | |||
monospace | |||
proportional | |||
system | |||
symbol | |||
system | |||
serif | |||
monospace | |||
Helvetica | |||
такой гарнитуры нет | |||
system | |||
serif | |||
monospace | |||
Courier New | |||
<font face=...>...</font> | |||
<span class=family>...</span> | |||
<p id=font_face>...</p> |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 12.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Fcolort
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Цвет текста
#navy {color:navy;} ... <div><p id=navy>...</p></div> |
|||
#navy {color:navy;} ... <div><i id=navy>...</i></div> |
|||
<div><span style="color:navy;">...</span></div> | |||
<div><em style="color:navy;font-style:normal;">...</em></div> | |||
цвет всех компонентов блочного элемента разметки | |||
цвет границы блочного элемента разметки | |||
цвет текста в блочном элементе разметки | |||
цвет текста в строковом или блочном элементе разметки | |||
наследуется | |||
не наследуется | |||
наследуется только у параграфа |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 6.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Floatt
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Обтекание(float,clear)
align | |||
float | |||
clear | |||
right | |||
left | |||
top | |||
bottom | |||
both | |||
запрещает обтекание плавающего блока | |||
запрещает обтекание данным блоком плавающего элемента разметки | |||
нет такого атрибута CSS | |||
можно | |||
нет нельзя |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 7.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Fontt
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Шрифт
font-family | |||
font-style | |||
font-variant | |||
можно | |||
нельзя | |||
этот атрибут определяет начертание, а не гарнитуру | |||
наследуется | |||
не наследуется | |||
наследуется только в DIV | |||
в NN нельзя | |||
в IE можно | |||
нет такого атрибута |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 9.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Identt
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Первая строка параграфа
text-indent | |||
p:first-line | |||
p:first-letter | |||
является, т.к. отрицательное значение отступа допускается | |||
не является, т.к. отрицательное значение отступа в данном случае не допускается | |||
не является, т.к. вместо символа ":" в описании используется символ "=", что является синтаксический ошибкой | |||
нельзя, т.к. это свойство всего элемента в целом | |||
можно, но лучше определить его в стиле описания элемента P | |||
нет такого атрибута |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 7.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Inheritt
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Наследование и переопределение
наследует | |||
не наследует | |||
наследует при одинаковых гарнитурах шрифта | |||
можно переопределить | |||
нельзя переопределить | |||
можно через импорт файла во внешнее описание стиля из элемента разметки LINK | |||
красный | |||
синий | |||
цвет умолчания |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 7.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Introt
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Назначение CSS
точное позиционирование блока текста | |||
типизация разметки HTML | |||
разделение логической структуры документа и формы его представления | |||
можно | |||
нельзя | |||
можно | |||
нельзя | |||
полный контроль возможен только в IE 4.x и старше | |||
определять стили в нотации JavaScript можно и в NN, и в IE, начиная с версий 4.х, изменить стиль после загрузки документа можно только в IE 4.x и старше. |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 8.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Lheightt
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Межстрочное расстояние
font-family | |||
line-height | |||
p:first-letter | |||
font-size | |||
высоту строки, равную заглавной букве шрифта | |||
расстояние между базовыми линиями строк, расположенных друг под другом | |||
расстояние от верхней кромки строки до нижней кромки выше расположенной строки | |||
нельзя, т.к. не существует отрицательного межстрочного расстояния | |||
можно, задав отрицательное межстрочное расстояние | |||
можно, задав значение атрибута line-height меньше, чем значение атрибута font-size |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 6.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Listst
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Списки
формой маркеров | |||
изображением маркеров | |||
и формой, и изображением маркеров | |||
можно (<input type=hidden>) | |||
можно (<div style="visibility:hidden;">...</div>) | |||
можно (<div style="display:none;">...</div>) | |||
нельзя | |||
нельзя | |||
можно, т.к. для этой цели существует специальный атрибут | |||
можно как обычным блоком текста |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 8.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Login
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Зачет | Семинар | Литература | Отзывы |
Зачет по курсу CSS
Для сдачи зачета необходимо быть зарегистрированным участником тестирования. Если Вы уже зарегистрировались, то введите в поле "Login:" свой идентификатор, а в поле "Password:" свой пароль после этого выберите ссылку "Начать тестирование...".
Если Вы в первый раз решили принять участие в тестировании, то перейдите к странице регистрации по ссылке "Регистрация...". После регистрации вы немедленно получите возможность выполнить тест.
Login: | |
Password: |
Начать тестирование... ]
Результаты тестирования записываются в базу данных системы и высылаются по желанию участника тестирования по e-mail.
Зачет представляет из себя двадцать выбранных случайным образом вопросов из тех, что предсталены в разделе "Тесты". На выполнение зачета отводится 30 минут. Зачет сдан успешно, если участник набирает 4/5 от максимального колличества баллов сгенерированного для него теста.
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Lspacet
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Межбуквенное расстояние
letter-spacing | |||
font-size | |||
font-variant | |||
line-height | |||
text-indent | |||
влияет | |||
не влияет | |||
в IE влияет, а в NN не влияет | |||
нет неодинаковое | |||
одинаковое | |||
все определяется версией браузера |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 7.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Margint
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Внешний отступ
стрелка номер 1 | |||
стрелка номер 2 | |||
стрелка номер 3 | |||
стрелка номер 4 | |||
20px | |||
отступ умолчания | |||
20px+отступ умолчания | |||
эквивалентны | |||
описания неэквивалентные | |||
каждый браузер отображает по-своему |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 7.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Ordert
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Порядок наложения. "Слойки"
visibility | |||
position | |||
z-index | |||
clip | |||
увеличивает свое числовое значение в направлении "от пользователя в глубину экрана" | |||
увеличивает свое числовое значение из глубины экрана по направлению к пользователю | |||
принимает те значения, которые назначил автор страницы | |||
не существует | |||
существует | |||
нет такого атрибута | |||
div {clip:rect(20,20,200,100);} | |||
div {clip:rect(20,200,100,20);} | |||
div {clip:rect(20,20;200,20;200,100;20,100);} |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 10.
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Paddingt
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Внутренний отступ
стрелка номер 1 | |||
стрелка номер 2 | |||
стрелка номер 3 | |||
стрелка номер 4 | |||
20px | |||
10px | |||
30px | |||
отступ умолчания | |||
можно | |||
нет нельзя | |||
можно, если он расположен внутри элемента А |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 8.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Placet
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Способы применения
2 | |||
3 | |||
4 | |||
через атрибут style этого элемента разметки | |||
через имя-селектор элемента разметки в элементе STYLE | |||
путем определения атрибутов стиля в селекторе-идентификаторе данного элемента | |||
через JavaScript описание CSS | |||
в элементе LINK | |||
"@import(url) | |||
через атрибут style элемента разметки | |||
<p style="text-align:justify;">...</p> | |||
<p class="text-align:justify;">...</p> | |||
<p id="text-align:justify;">...</p> |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 11.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Post
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Позиционирование
div | |||
layer | |||
body | |||
table | |||
frame | |||
нельзя, т.к. в одном элементе разметки не может быть и текста и картинки | |||
можно при помощи блочных атрибутов CSS | |||
можно, используя атрибуты позиционирования | |||
position | |||
top | |||
left | |||
width | |||
height | |||
display | |||
visibility |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 14.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Sintacst
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Синтаксис
селектор-идентификатор объекта | |||
селектор-имя класса | |||
селектор-имя элемента разметки | |||
составной селектор | |||
вложенный в элементы i и em элемент u будет отображен цветом navy и курсивом | |||
все перечисленные элементы будут отображаться цветом navy и курсивом | |||
для всех указанных элементов разметки параметры цвета и стиля отображения будут общими, а остальные параметры будут определены правилами умолчания | |||
разделитель в имени селектора (отделяет имя класса от его модификатора) | |||
обязательный символ при обозначении селектора корневого класса | |||
опционный параметр, его использование жестко не регламентируется | |||
ul.a {color:red;} | |||
ul,a {color:red;} | |||
ul a {color:red;} | |||
ul:a {color:red;} |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 14.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Sizet
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Кегль
font-size:12pt; | |||
font-variant:small-caps | |||
font-size:10px; | |||
font-size:60% | |||
межстрочное расстояние | |||
размер заглавной буквы | |||
расстояние между базовыми линиями шрифта | |||
размер "очка" шрифта | |||
можно | |||
нельзя | |||
только в момент перезагрузки страницы |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 9.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Stylet
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Начертание
font-family | |||
font-style | |||
font-size | |||
font-variant | |||
font-weight | |||
font-decoration | |||
<span style="font-style:italic;">...</span> | |||
<div style="font-variant:italic;">...</div> | |||
<span style="font-weight:bold;">...</span> | |||
<div style="font:italic bold;">...</div> | |||
в спецификации CSS нет атрибута, где можно было бы определить начертание "капитель" | |||
в большинстве гарнитур отсутствует это начертание | |||
такого начертания вообще нет |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 7.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Textt
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Свойства текста
font-size | |||
text-align | |||
line-height | |||
color | |||
text-transform | |||
letter-spacing | |||
отличий нет | |||
свойства текста относятся ко всему элементу, а свойства шрифта только к его части | |||
Свойcтва шрифта определяют начертание букв, а свойства текста их взаимное расположение внутри элемента разметки | |||
свойства описания блоков текста относятся только к блочным элементам разметки, а свойства текста как к блочным, так и к строчным элементам разметки | |||
свойства блоков текста определяют свойства блока как целого, в то время как свойства текста определяют взаимное расположение букв и слов внутри блока текста | |||
между этими свойствами нет разницы |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 11.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Transt
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Преобразование шрифта
text-decoration | |||
text-transform | |||
text-align | |||
font-family | |||
font-style | |||
<div style="text-decoration:underline;">...</div> | |||
<span style="text-transform:underline;">...</span> | |||
<u style="text-decoration:line-throught;">...</uv> | |||
<span style="text-decoration:underline;">...</span> | |||
фрагмет текста будет отображаться только заглавными буквами | |||
все слова во фрагменте текста будут начинаться с заглавных букв, а остальные буквы будут преобразованы в строчные | |||
в этом определении есть ошибка, поэтому оно ничего не подразумевает |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 7.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999
Treecsst
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Тесты
Web-инжиниринг
Назначение CSS
Способы применения CSS
Синтаксис
Переопределение и наследование описаний
Понятие блочного и строкового элемента
Свойства блочных элементов(block или box)
Отступы(margin)
Набивка(padding)
Границы(border)
Обтекание(float,clear)
Цвет
Цвет текста(color)
Цвет фона текста(background-color)
Шрифт(font)
Гарнитура(font-family)
Кегль(font-size)
Начертание(font-style,font-variant,font-weight)
Свойства текста
Межбуквенные расстояния
Выравнивание
Трансформации(подчеркивание, прописные, строчные)
Первая строка параграфа
Высота строки
Списки и отображение элементов
Форма "пулек"
"Пульки"-картинки
Позиционирование
Координаты и размеры
Управление видимостью
Порядок наложения. "Слойки".
© KIAE, 1999
Visualt
Кузина И.А.,Храмцов П.Б. - Применение каскадных таблиц стилей
Конспект | Тесты | Зачет | Семинар | Литература | Отзывы |
Управление видимостью
left | |||
top | |||
visibility | |||
display | |||
show | |||
hidden | |||
visible | |||
invisible | |||
нет такого атрибута | |||
закрывает полностью в области наложения блоков | |||
закрывает полностью в области наложения блоков, если для блока определен фон | |||
закрывает частично в области наложения блоков, если фон не был определен или прозрачен | |||
нет не существует | |||
NN не поддерживает этот атрибут | |||
в NN для "проявления" элемента используется show, а в IE - visible |
function result() { var a="/control/read_db/csst?"; for(i=0;i
Ваша оценка:
Максимальный балл: 11.
далее...
[ начало страницы ] [ обложка учебника ]
©KIAE, 1999