Чтение онлайн

на главную

Жанры

HTML: Популярный самоучитель
Шрифт:

Скрытие всплывающего меню, кроме случая, когда пользователь выбрал один из его пунктов, происходит также при повторном щелчке кнопкой мыши на пункте меню, а также при щелчке кнопкой мыши в любом месте документа за пределами меню. Для реализации последнего элемент BODY каждой страницы настроен следующим образом:

<BODY onClick = «hide_menu;»>

Теперь рассмотрим, как реализованы раскрывающиеся меню. Они реализуются даже проще, чем сама строка меню. Как и в примерах предыдущей главы, раскрывающиеся меню основаны на использовании свободно позиционируемых таблиц (хотя это можно сделать на основе любого свободно позиционируемого элемента, например DIV, причем внешний вид такого меню будет ничуть не хуже). Каждая

строка таблицы представляет собой отдельный пункт меню. Ниже приводится HTML-код, добавляемый сценарием для создания раскрывающегося меню Информация (это меню самое маленькое и поэтому его реализацию удобнее изучать) (пример 14.5).

Пример 14.5. Таблица, соответствующая меню Информация

<TABLE id = «general» class = «hidden»>

<TR id = "general_history" class = "item"

onMouseOver = "general_history.className = 'selected'"

onMouseOut = "general_history.className = 'item'">

<TD><A href = "history.html">История</A></TD>

</TR>

<TR id = "general_values" class = "item"

onMouseOver = "general_values.className = 'selected'"

onMouseOut = "general_values.className = 'item'">

<TD><A href = "values.html">Пищевая ценность яблок</A></TD>

</TR>

<TR id = "general_collectsave" class = "item"

onMouseOver = "general_collectsave.className = 'selected'"

onMouseOut = "general_collectsave.className = 'item'">

<TD><A href = "collectsave.html">Сбор и хранение яблок</A></TD>

</TR>

</TABLE>

При просмотре текста примера 14.5 можно увидеть, что текст пунктов меню, как и текст пунктов строки меню, заключен в теги <A> и </A>. Это сделано для упрощения, ведь, кроме навигации (основная функция гиперссылок), других функций на меню не возлагается.

Подсветка выделенных пунктов меню осуществляется за счет изменения их стилевого класса при обработке событий onMouseOver и onMouseOut.

Следует отметить один недостаток использованной реализации меню: хотя и подсвечивается вся ячейка таблицы, «срабатывает» пункт меню только при щелчке кнопкой мыши на тексте гиперссылки. Это потому, что внутрь тегов <A> и </A> заключен только текст, а не вся ячейка таблицы. Это сделано лишь для того, чтобы не усложнять еще больше сценарий, создающий меню. Вы можете устранить этот недостаток самостоятельно, изменив фрагменты типа

<TD><A href = «history.html»>История</A></TD>

на

<A href = «history.html»><TD><A href = «history.html»>История</A></TD></A>

Если же просто поместить внутрь элемента A ячейку (не помещая еще и текст), то меню тоже будет работать, но форма указателя над текстом будет уже не та (текстовый I-указатель).

Разворачивающиеся абзацы

Как было сказано выше, особое внимание нужно уделить представлению на страницах рецептов (если не забыли, сайт по большей части кулинарной тематики). Поэтому рассмотрим, как можно повысить удобство при работе со списком рецептов, который планируется разместить на сайте.

Для этого можно использовать следующий прием. В текст страницы помещаются как рецепты, так и их названия. При этом сразу показываются пользователю только названия рецептов. При щелчке кнопкой мыши на названии под ним появляется сам рецепт (порядок приготовления и состав блюда). Для скрытия рецепта пользователь должен опять щелкнуть кнопкой мыши на его названии.

Собственно так и реализовано представление рецептов на сайте. Фрагмент HTML-документа, в котором используется описанный подход (разворачивающиеся абзацы), приведен в примере 14.6.

Пример 14.6. Использование разворачивающихся абзацев

...

<TD class = "content">

<!–Далее

идет содержимое страницы–>

Текст страницы...

<P class = "exp" onClick = "expand(recept1_body)">

<A href = "expand" class = "exp_ref"

onClick = "event.returnValue = false;">

Рецепт 1

</A>

<DIV class = "exp_hidden" id = "recept1_body">

<SPAN class = "process">

Порядок приготовления блюда

</SPAN>

<P class = "products">Состав блюда

</DIV>

<P class = "exp" onClick = "expand(recept2_body)">

<A href = "expand" class = "exp_ref"

onClick = "event.returnValue = false;">

Рецепт 2

</A>

<DIV class = "exp_hidden" id = "recept2_body">

<SPAN class = "process">

Порядок приготовления блюда

</SPAN>

<P class = "products">Состав блюда

</DIV>

Прочий текст страницы...

</TD>

...

В приведенном выше примере, помимо текста, к содержимому страницы добавлены два рецепта (см. элементы, имеющие стилевой класс exp, разворачиваемая часть этих элементов имеет стилевой класс exp_hidden, когда она скрыта, и класс expboby, когда показана).

Страница, фрагмент которой приведен в примере 14.6, выглядит так, как показано на рис. 14.3.

Рис. 14.3. Представление рецептов

Работоспособность используемого способа представления рецептов обеспечивает небольшой сценарий (функция), находящийся там же, где и сценарий, отвечающий за всплывающее меню, то есть в файле popup_menu.js (пример 14.7).

Пример 14.7. Сценарий, реализующий работу разворачивающихся абзацев

//Функция разворачивает или сворачивает абзац, на котором щелкнул

//пользователь (если, конечно, абзац для этого предназначен)

function expand(element){

if (element.className == "exp_hidden"){

//Показываем абзац element.className = "expbody";

}

else if (element.className == "expbody"){

//Скрываем элемент element.className = "exp_hidden";

}

}

Приведенная в примере функция expand скрывает или показывает элемент страницы, ссылка на который передана ей в качестве параметра, путем изменения его стилевого класса (описание используемых стилевых таблиц приведено далее).

Прочие сценарии

Кроме рассмотренных сценариев, обеспечивающих создание, работоспособность меню и разворачивающихся абзацев, каждая страница использует еще два сценария для заполнения секции дополнительной информации (ячейка, образующая левый ряд основной таблицы) и информации об авторских правах (нижняя часть страницы, образованная слиянием ячеек последней строки основной таблицы).

Первый из указанных сценариев находится в файле load_info.js и выглядит следующим образом (пример 14.8).

Пример 14.8. Содержимое файла load_info.js

/*

Сценарий в этом файле загружает картинки яблок

и рекламные сообщения

*/

//Функция генерации случайного значения (целого)

function rand(min, max){

return Math.floor(Math.random*(max-min)+min);

}

//Загрузка изображения document.write("<TABLE width = \"100%\" height = \"100%\">");

document.write("<TR><TD><IMG id = \"apple_image\" width = \"100%\"");

document.write("src = \"apples/" + rand(1,14.9) + ".jpg\"></TD></TR>");

//Типа загрузка рекламы...

document.write("<TR><TD>Здесь могла быть Ваша реклама</TD></TR>");

document.write("</TABLE>");

Поделиться:
Популярные книги

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Маяк надежды

Кас Маркус
5. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Маяк надежды

Великий перелом

Ланцов Михаил Алексеевич
2. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Великий перелом

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Ох уж этот Мин Джин Хо 2

Кронос Александр
2. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 2

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6