Навигация
Мини-чат
200
 
 
Главная » Статьи » Уроки програмирования » JavaScript [ Добавить статью ]

JavaScript: полезные функции (часть V)

Эффект, который мы сейчас рассмотрим, является, пожалуй, самым распространенным. И заключается он в смене изображения при наведении на него мышкой. Часто можно слышать английское название эффекта - RollOver, что обычно переводят как "перекатывание". Мне не кажется это название удачным, но все же, давайте приступим.

Эффект может встречаться в различных вариантах, самые распространенные из которых это:


Несмотря на внешне различное проявление этих эффектов, все они реализованы схожим образом и отличаются лишь в мелочах. Давайте, по порядку разберем каждый из этих вариантов.


Подсвечивание пунктов меню


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

Для начала, нам будет необходимо нарисовать каждую кнопку меню в двух вариантах: в "отжатом" и "нажатом" состояниях. Будем считать, что это уже сделано и перейдем к рассмотрению механизма, который обеспечивает нужную нам функциональность.

Начнем с написания HTML-кода меню. Это несложно и будет выглядеть примерно так:

  1. <a href=""><img src="pic/pic-1.gif" name="pic1"></a><br>   
  2. <a href=""><img src="pic/pic-2.gif" name="pic2"></a><br>   
  3. <a href=""><img src="pic/pic-3.gif" name="pic3"></a>   

Это обычное меню, составленное из графических элементов. Я опустил несущественные для понимания детали - такие как указание высоты и ширины изображения, тег ALT и т.п. Заметьте, однако, что для каждой картинки указан атрибут name, который понадобится для ссылки на картинку.

Теперь мы немного модифицируем меню, добавив в него вызов функций смены изображения. Для отслеживания попадания курсора мышки на изображение мы воспользуемся событием onMouseOver и привяжем к нему вызов функции смены изображения:


А для отслеживания ухода курсора с изображения, на помощь придет событие onMouseOut которое также вызывает функцию смены изображения, но уже с другими параметрами:


В первом случае мы указываем ссылку на изображение "нажатой кнопки", а во втором, соответственно, "отжатой" (или исходной картинки, что суть одно и тоже).

Теперь напишем всю конструкцию полностью на примере одного пункта меню:

  1. <a href="page.htm" onMouseOver="change('pic1','pic/pic-1-on.gif');"   
  2. onMouseOut="change('pic1','pic/pic-1.gif');"><img   
  3. src="pic/pic-1.gif" name="pic1"></a>   

Подобным образом необходимо обработать каждый пункт нашего меню. Отличие будет заключаться лишь в смене значения атрибута name, который для каждого пункта должен быть уникальным и соответствующей коррекции значений параметров в вызовах функций onMouseOver и onMouseOut.

Перед тем, как перейти к написанию кода, поговорим о том, каким образом мы можем управлять изображениями на страничке.

Как я писал в одной из более ранних статей, броузер перед показом странички на экране, разбивает ее на составляющие блоки и заносит их в свою базу данных, предоставляя нам доступ к информации посредством объектной модели. В частности, все картинки сохраняются в объекте images, который, в свою очередь, входит в объект document. И, например, для того, чтобы заменить одно изображение другим, нам достаточно воспользоваться следующей конструкцией:


Обратите внимание, что для ссылки на конкретное изображение (ведь на страничке их может быть много), мы используем имя картинки, которое указали в атрибуте name тега <img>. В данном примере, мы изменили изображение обычной кнопки, на ее "нажатый" вариант.

Точно таким же образом, мы можем обратиться и к другим атрибутам картинки: ширине (width), высоте (heigth), поясняющему тексту (alt) и т.д. В нашем же случае достаточно будет изменить только ссылку на картинку, т.к. изображения "обычной" и "нажатой" кнопки имеют одинаковые размеры.

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

  1.    
  2.  function change(img, ref) {   
  3.   if (browser_ok == 'true') {   
  4.   document.images[img].src = ref;   
  5.   }   
  6.  }   
  7.    

О способе определения типа и версии броузера, подробно написано в первой статье цикла о JavaScript.


Бегающий указатель


Чем отличаются варианты RollOver с "подсвечиванием пунктов меню" и "бегающим указателем"? Только тем, что во втором случае у нас есть всего две картинки, используемые для всех пунктов меню - пустая и с изображением указателя. Пример использования данного эффекта, можно посмотреть вот здесь

В этом варианте RollOver нам придется слегка изменить HTML-код, описывающий меню, т.к. перед каждым пунктом меню мы добавляем изображение пустого указателя:

  1. <img src="pic/pointer.gif" name="pic1"><a   
  2. href="news.htm" onmouseover="over('pic1');"   
  3. onmouseout="out('pic1');"><img src="pic/pic-1.gif"></a>   

Обратите внимание на несколько особенностей. Во-первых, вместо одной функции смены изображения нам понадобятся две, т.к. действия, производимые при попадании курсора в область пункта меню, и покидании ее слегка отличаются. Мы назовем эти функции соответственно over() и out(). Во-вторых, заметьте, что атрибут name, тега <img>, переместился из описания пункта меню в описание указателя - ведь теперь мы подсвечиваем не меню, а указатель!

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

  1.    
  2.  function over(img) {   
  3.   if (browser_ok == 'true') {   
  4.   document.images[img].src = "pic/pointer-on.gif";   
  5.   }   
  6.  }   
  7.  function out(img) {   
  8.   if (browser_ok == 'true') {   
  9.   document.images[img].src = "pic/pointer.gif";   
  10.   }   
  11.  }   
  12.    

Осталось разобраться с отличиями, которые присущи третьему варианту эффекта, а именно...


Сменяющаяся картинка


Пример использования данного эффекта можно наблюдать непосредственно на моем собственном сайте.

Его отличие, от ранее рассмотренных вариантов, заключается в том, что используется всего одна картинка, которую мы изменяем, но вариантов замены больше чем два. Необходимо так же отметить, что скрипт может вызываться из одной части странички, а смена картинки происходить совершенно в другой.

Как и в предыдущем случае, начнем с корректировки HTML-кода. В данном варианте он будет состоять из двух фрагментов: описание изображения, которое будет меняться и описание областей, при попадании на которые вызывается скрипт. Это может быть, к примеру, то же самое меню:

  1. <img src="pic/default.gif" name="pic">   
  2. ...   
  3. <a href="page_1.htm" onmouseover="over('pic/image-1.gif');"   
  4. onmouseout="out();"><img src="pic/pic-1.gif"></a><br>   
  5. <a href="page_2.htm" onmouseover="over('pic/image-2.gif');"   
  6. onmouseout="out();"><img src="pic/pic-2.gif"></a><br>   
  7. <a href="page_3.htm" onmouseover="over('pic/image-3.gif');"   
  8. onmouseout="out();"><img src="pic/pic-3.gif"></a>   

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

  1.    
  2.  function over(ref) {   
  3.   if (browser_ok == 'true') {   
  4.   document.images[img].src = ref;   
  5.   }   
  6.  }   
  7.   
  8.  function out() {   
  9.   if (browser_ok == 'true') {   
  10.   document.images[img].src = "pic/default.gif";   
  11.   }   
  12.  }   
  13.    

Вот мы и разобрались со всеми вариантами скриптов, для реализации эффекта RollOver. Но, подождите еще немножко, т.к. осталось рассмотреть еще один очень важный вопрос:

Предварительная загрузка изображений


Я специально выделил этот момент в отдельный подраздел, т.к. он очень важен и сильно сказывается на качестве эффекта и визуальной загрузке странички.

Для чего используется предварительная загрузка изображений? Ответ лежит в самом механизме работы интернет - как известно, любая страничка состоит из набора файлов, которые загружаются одновременно с основной страничкой. Но есть одна особенность - загружаются только картинки, которые видны на экране. Наш же эффект построен на подмене изображений и соответственно часть картинок при загрузке не видна.

Предварительная загрузка заключается в том, что мы заранее скачиваем невидимые картинки в кэш компьютера. Если предзагрузка не используется, то при смене картинки будет происходить заметная задержка - связанная с тем, что картинка будет загружаться непосредственно с сервера.

Механизм предварительной загрузки изображений осуществляется при помощи следующего фрагмента кода:

  1.    
  2.  if (browser_ok == 'true') {   
  3.   a1=new Image; a1.src="pic/pic-1-on.gif";   
  4.   a2=new Image; a2.src="pic/pic-2-on.gif";   
  5.   a3=new Image; a3.src="pic/pic-3-on.gif";   
  6.  }   
  7.    

Мы просто создаем объект Image для каждой невидимой в данный момент картинки и указываем адрес изображения. Это приводит к тому, что, дойдя до этого фрагмента кода, броузер инициирует загрузку изображений точно так же, как и для обычных видимых картинок. К концу загрузки странички, абсолютно все картинки ее составляющие находятся в кэше, и от этого будут загружаться мгновенно.

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

При грамотной нарезке страничек сайта, мы можем использовать часть изображений первой страницы во внутренних. Подобный механизм реализован на моем собственном сайте (www.cherry-design.spb.ru). Если Вы к нему внимательно присмотритесь, то обнаружите, что почти вся необходимая графика грузится на первой страничке и открытие внутренних разделов сайта происходит почти мгновенно. В частности, оказываются уже загруженными фрагменты логотипа разных цветов и графика составляющая пункты меню.

Надеюсь, что приведенные выше скрипты и описание механизма их работы, покажутся Вам полезными, и, используя их, Вы сможете реализовать свои задумки.

Архив с примерами скриптов, рассмотренных в данной статье, можно взять отсюда.
Категория: JavaScript | Добавил: Djakob (16.10.2008)
Просмотров: 393 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Аккаунт
 
Поиск
Наши друзья

Закачайся на все 100%

V1T.RU

Занесено в каталог Deport.ru

Обмен ссылками

Закачайся на все 100%

Goon
каталог

Рейтинг сайтов TOP•MostInfo.net

Рейтинг сайтов

Участник Премии Рунета 2008

Goon поиск, почта, каталог добавить сайт, барахолка, работа, видео приколы, поиск людей, частные фотографии

Добавить сайт / обмен ссылками

Samsonite Получить свой бесплатный сайт в UcoZ a href="http://kinotraff.ru/in.php?id=25391&base=1" title="Скачать фильмы">Скачать фильмы Интернет-магазин багажа

Закачайся на все 100%
 
Голосование
Каким браузером вы пользуетесь?
Всего ответов: 29
Статистика
Сейчас на сайте: 1
Гостей: 1
Пользователей: 0

 
& design by Sapon&manysoft-net.ru