|
Динамическое изменение графических элементов веб-страницыИтак, в предыдущем разделе мы узнали, каким образом можно произвольно изменять любые текстовые элементы на веб-странице. А как быть, если надо динамически изменить не текст, а графику? Допустим, мы создали несколько красивых графических кнопок для гиперссылок и хотим, чтобы при наведении мыши соответствующая кнопка изменяла свой вид (например, подсвечивалась), по аналогии с текстовыми гиперссылками при наличии определенного псевдокласса A:hover. Подготовка графических кнопокДля примера модифицируем страницу со ссылками на поисковые машины, которую мы создали в главе 2 (см. рис.2.9). Сначала проведем некоторую подготовительную работу, а именно: нарисуем графические кнопки для гиперссылок, а также фоновый рисунок для всей страницы. Затем определим стиль для элемента <BODY>: BODY { text-align: center; Поскольку все содержимое нашей страницы будет размещено по ее центру, мы определили стилевое свойство text-align: center прямо для основного элемента страницы <BODY>. Теперь, чтобы заголовок и пояснительный текст не «терялись» на достаточно пестром фоне, определим для них «бордюры» и фоновый цвет: H1 { border-color: #0063CE; Имеется в виду, что мы заключим пояснительный текст в тег <SPAN>. Теперь напишем основной текст страницы:
<BODY> Рис. 7.17. Страница графически оформленных гиперссылок Во-первых, придется сделать еще четыре рисунка — по одному для каждой подсвеченной кнопки. Ведь на самом деле, чтобы кнопка изменила свой цвет, нужно просто-напросто подставить на то же место рисунок с кнопкой другого цвета. Так что для начала придется открыть графический редактор и изменить вид кнопок. Управление «подсветкой» кнопокТеперь назначим обработчику событий onMouseOver смену изображения. Собственно говоря, для этого нужно всего лишь изменить атрибут SRC= тега <IMG>: <IMG SRC="Images/altavista.jpg" WIDTH="192" HEIGHT="40"BORDER="0" ALT="Altavista"onMouseOver="this.src='Images/altavista2.jpg' "> Теперь при наведении указателя мыши на кнопку Altavista вид кнопки изменится, так как будет загружен другой рисунок. Точно таким же способом нужно сменить изображение обратно при выведении указателя мыши за пределы кнопки: <IMG SRC="Images/altavista.jpg" WIDTH="192" HEIGHT="40" BORDER="0" ALT="Altavista" onMouseOver="this.src='Images/altavista2.jpg'" onMouseOut="this.src='Images/altavista.jpg'"> Вот теперь, наконец, мы добились, чего хотели, но только для одной кнопки: при наведении на нее указателя мыши она изменяет свой вид (рис. 7.18), а при выведении указателя восстанавливает прежний вид. Рис. 7.18. На этой странице графические гиперссылки подсвечиваются при наведении на них указателя мыши Можно, конечно, написать такую же конструкцию и для остальных трех кнопок. Однако, давайте реализуем более изящное решение: напишем одну функцию, которая будет менять файл рисунка для всех тегов <IMG>, имеющихся на странице. Точнее, функций будет две: одна для события onMouseOver, а другая — для onMouseOut. Воспользуемся тем, что файлы рисунков «подсвеченных» кнопок имеют те же имена, что и файлы рисунков обычных кнопок, плюс цифра 2 (например: altavista.jpg — altavista2.jpg). Пусть первая функция, реагирующая на наведение мыши, просто вставляет двойку в нужное место: function change1() { Как видите, эта функция сначала проверяет, на какой объект, собственно, наведен указатель мыши, и если это элемент <IMG>, то в нужное место значения его атрибута SRC= вставляется цифра 2, а если это какой-нибудь другой элемент, то функция просто ничего не делает. Вроде все правильно, однако слишком громоздко — так сразу и не разберешься, что эта функция делает, да и при вводе таких строк легко ошибиться и потом долго и мучительно искать, почему выдаются сообщения об ошибках. Сократим этот код, присвоив значение window.event.srcElement временной переменной: function change1() { var a=window.event.srcElement; Вот это совсем другое дело — смотрится гораздо прозрачнее, а функционирует точно так же. Теперь напишем аналогичную функцию, удаляющую двойку из значения атрибута SRC=: function change2() { var a=window.event.srcElement; Нам осталось только назначить обработчики событий. Поскольку мы не знаем, для каких конкретно элементов их назначать и сколько, назначим их объекту document (обратите внимание, что внутри функций не зря производится проверка на имя тега): document.onmouseover=change1 ; Последние две строки также должны находиться в блоке <SCRIPT>. Обратите внимание на отсутствие круглых скобок после имен функций! (Если скобки поставить, то это приведет к немедленному вызову функций, а нам нужно только связать их имена с соответствующими событиями.) Теперь можно добавлять сколько угодно кнопок-гиперссылок на эту страницу, не загромождая ее большим количеством повторяющегося кода. Предварительная загрузка графических объектовОднако это еще не все. Представьте себе, что пользователь навел мышь на кнопку-гиперссылку. Что должно произойти? Естественно, замена рисунка. Но откуда броузер возьмет новый рисунок? Начнет загружать через Интернет, поскольку до этого новый рисунок не был загружен в память. В результате на некоторое время отобразится пустой прямоугольник, и весь эффект пропадет! Чтобы этого избежать, придется написать код для предварительной загрузки в память всех картинок. Это можно сделать при помощи объявления объектов типа Image: var img1=new Imaged; img1.src='Images/altavista.jpg'; и так далее. Теперь все графические объекты будут загружены в память заранее, и при наведении мыши на кнопку-гиперссылку смена рисунка произойдет практически мгновенно, что и даст требуемый эффект. Посмотрим, что у нас получилось в целом.
Можно, разумеется, придумать и другие средства взаимодействия с графическими элементами. В главе 6, например, мы создали картинку с динамически изменяющимся размером. В разделе 7.2 мы передвигали картинки с помощью мыши. Вы можете также попробовать передвигать картинки без участия пользователя (что создаст эффект анимации) или изменять их стилевое свойство filter. |