|
"Отгадыватель мыслей" на вашем сайтеВ одном из предыдущих номеров газеты-вкладки “В мир информатики” была приведена программа, демонстрирующая фокус, в котором происходит… отгадывание мыслей :). Напомню, что в фокусе человеку, которому он демонстрируется, нужно загадать двузначное число, вычесть из него сумму его цифр и полученную разность найти в табличке, после чего следует запомнить символ рядом с этой разностью. Затем этот символ… отгадывается! А не хотите ли разместить такой фокус на школьном сайте? Если да, то эта статья — для вас. В разработке веб-страницы можно выделить три основных этапа: 1) разработка пользовательского интерфейса, то есть внешнего вида страницы в браузере, и “логики” действий, которые могут произойти с элементами страницы; 2) реализация интерфейса на языке HTML или XHTML; 3) написание скриптов для обработки возможных событий, инициированных посетителем страницы или браузером. Поставим задачу получить внешний вид страницы в начальном состоянии как на рис. 1, после щелчка на кнопке с надписью “Старт” — как на рис. 2, а после того, как посетитель сайта отметил “флажок” с надписью “Я нашел число и символ”, — как на рис. 3. Рис. 1. Вид веб-страницы после загрузки
Рис. 2. Вид веб-страницы после щелчка на кнопке "Старт" Рис. 3. Вид веб-страницы выбора "флажка" "Я нашел число и символ" Размещать элементы на веб-странице можно, используя язык HTML или его модификацию — XHTML. Для простоты будем использовать HTML. Писать код HTML для веб-страницы можно в простом текстовом редакторе, например, в Блокноте. Но сохранять файл необходимо с расширением html вместо используемого по умолчанию txt. Для этого в диалоговом окне Сохранение файла указываем нужное расширение через точку, а в списке Тип файла выбираем вариант Все файлы (см. рис. 4). Рис. 4. Диалоговое окно сохранения файлов в формате html из Блокнота Итак, начнем писать код. Сначала обсудим содержание верхней части страницы. Название фокуса “Отгадыватель мыслей” оформим как заголовок в теге <title> … </title> и теге <h1> … </h1>. Порядок демонстрации фокуса целесообразно оформить в виде нумерованного списка (тег <ol> … </ol>). Кнопку с надписью “Старт” можно разместить так: <input type="button" value='Старт' … > Для оформления веб-страницы удобно использовать так называемую “табличную разметку”, то есть таблицы. И в нашем случае мы список и кнопку поместим в ячейку таблицы, а саму таблицу разместим по центру, линии сетки таблицы останутся невидимыми: <table align="center" … Рядом с кнопкой Старт необходимо разместить символ “пробел”, который браузер понимает как “ ”. Эта “хитрость” нужна для того, чтобы после того как мы скроем кнопку, браузер не изменил бы высоту ячейки с кнопкой. Фрагмент кода для рассмотренных элементов выглядит следующим образом (мелким шрифтом выделены части, которые необязательны): <html> <head> <title> Отгадыватель мыслей </title> <style type="text/css"> <!-- body {font-size: 11pt;} td,th {font-size: 11pt;} --> </style> <body bgcolor="indigo"> <h1 align="center" style="color: gold"> ОТГАДЫВАТЕЛЬ МЫСЛЕЙ </h1> <table align="center" style="color: white" height=150> <tr> <td> <ol> <li>Задумайте 2-значное число.</li> <li>Вычтите из него сумму его цифр.</li> <li>Разность запомните.</li> <li>После щелчка на кнопке "Старт" найдите разность в появившейся таблице <br> и запомните символ справа от нее.</li> <li>После этого отметьте флажок "Я нашел число и символ".</li> </ol> </td> </tr> <tr> <td height=30 align=center> <input type="button" value='Старт' id='кнопка_старт' onClick="старт()"> </td> </tr> </table> Определенной проблемой является размещение “флажка” с текстом “Я нашел число и символ” в нижней части страницы (см. рис. 1). Дело в том, что по умолчанию все описываемые в коде элементы в большинстве случаев следуют друг за другом без пропуска строк. Придется “хитрить” и здесь. Разместим после кнопки с надписью “Старт” еще одну таблицу с числами и символами (см. рис. 2), но сначала сделаем ее невидимой, а потом покажем. Для этого используем скриптовый язык JavaScript1 и каскадные таблицы стилей с технологией DOM. Таблица состоит из 9 строк и 20 столбцов. В каждом нечетном столбце запишем числа от 5 до 94 (в порядке их возрастания, расположив эти числа по строкам), а в каждом четном — буквы латиницы и кириллицы, а также специальные знаки (все они расположены случайным образом). Для того чтобы временно скрыть таблицу, используем свойство display, определяющее ее “видимость”, — присвоим ему значение none. В нашем случае функция таблица имеет вид: function таблица () { document.write("<table border= 1 align='center' id='таб_сим' style='display: none; color: black;' width=500 height=200>") for (i = 1; i <= 9; i++) { document.write ("<tr>") for (j = 1; j <= 10; j++) { document.write ("<td align=center bgcolor=aqua>", 10*(i-1)+(j-1)+5, "</td>") if ((10 * (i - 1) + (j - 1) + 5) % 9 == 0) document.write ("<td align=center bgcolor=gold>" + свой + "</td>") else document.write ("<td align=center bgcolor=gold>", символы [Math.floor(Math.random()*символы.length)],"</td>") } document.write ("</tr>") } document.write("</table><br>") } Так как таблица символов до нажатия на кнопку Старт не должна быть заметной на веб-странице, мы делаем ее скрытой за счет того, что значение свойства display равно none. Но если объект становится скрытым, то он освобождает место на странице, которое занимал, а нам это не нужно из-за флажка. Поэтому заключим таблицу символов в другую таблицу, состоящую всего из одной ячейки с фиксированной высотой. С учетом этого раздел скриптов оформляется так: <script language="JavaScript" type="text/javascript"> var символы=['а', 'б', 'в', 'г', 'д', 'е', 'е', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'щ', 'ш', 'э', 'ю', 'я', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm', '%', '^', '@', '?', '&', '=', '*', '$', '!', '~', '+', '#'] свой2 = символы [ Math.floor (Math.random() * символы.length) ] function таблица(граница,… … <!--вывод таблицы символов--> <table border="0" align=center> <tr> <td height="260"> <script language="JavaScript" type="text/javascript"> таблица () </script> </td> </tr> </table> Создав таблицу, можем оформить функцию обработки щелчка на кнопке Старт, которую включим в раздел скриптов: … function старт() { document.getElementById("кнопка_старт").style.display='none' document.getElementById("таб_сим").style.display='' } Первая строка функции скрывает кнопку Старт, вторая необходима для включения видимости таблицы с идентификатором таб_сим. Обратим внимание на то, что метод getElementById объекта document взят из технологии DOM (Document Object Model — “Объектная Модель Документа”), которая позволяет разработчику веб-страниц очень многое: удалять существующие элементы и добавлять новые, изменять свойства размещенных объектов (как в нашем случае), модифицировать структуру имеющихся элементов. В нашем случае метод getElementById обращается к элементу по его идентификатору (id) и через метод style изменяет значение свойства display. Зная таблицу свойств элементов (CSS), можно подобным образом изменять любое доступное свойство любого элемента html-документа. Идем дальше, точнее — ниже :) — к элементу управления “флажок”. Запишем в разделе <form> … </form>: <form> <div style="color: white; text-align: left; font-size: 12pt; vertical-align: baseline;"> <input type="checkbox" style="" name="нашел" onclick="разгадка ()"> Я нашел число и символ </div> <p align=center><input type="text" name="отгадка" style='font-size: 12pt; display:none; text-align: center;' size="39" readonly><br> <input type="button" value='Начать снова' name='снова' style='font-size: 12pt; display:none;' onclick='начать_снова ()'> </p> </form> После отметки “флажка” должна появиться отгадка (см. рис. 3). Функция разгадка, реализующая это, может быть оформлена следующим образом: function разгадка() { document.forms[0].отгадка.style.display='block' document.forms[0].отгадка.value=' Вы запомнили символ ' + '"' + свой + '".' + " Невероятно!" document.forms[0].снова.style.display='block' document.getElementById("таб_сим").style.display='none' } — а функция обработки события “Щелчок по кнопке Начать снова”: function начать_снова () { location.reload () document.forms[0].нашел.checked = false } Первая команда функции перезагружает веб-страницу, то есть обновляет ее, вторая — снимает “флажок”. Задание для самостоятельной работы1. Дополните раздел скриптов новыми функциями, в основном разделе напишите код, размещающий интерфейсные элементы на веб-странице, и протестируйте проект3. 2. Измените функцию разгадка таким образом, чтобы в случае, когда посетитель вашего сайта отметит “флажок” раньше, чем щелкнет по кнопке Старт, появлялось сообщение “Не обманывайте меня! Вы не задумали число или(и) не нашли символ в таблице” (рис. 5). Рис. 5. Диалоговое окно, возникающее при несвоевременном выборе флажка 1 Его же будем использовать для управления и другими элементами — кнопкой Старт, “флажком” и др. 2 Переменная свой — отгаданный символ. 3 Весь HTML-код страницы размещен на сайте газеты “Информатика” в разделе Download. — Прим. ред.
А.. В.. Диков,
|