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

Таким образом задача сводится к следующему: необходимо создать эффект плавного перехода от полуяркой к четкой картинки при наведении на нее курсором. При этом необходимо создать эффект возврата в исходную позицию.
Текст кода на JavaScript для создания эффекта света выглядит следующим образом:

< script language=JavaScript>

var opac = new Array(30, 30, 30, 30);
var pict = new Array('al1', 'al2', 'al3', 'al4');
var tt = new Array();
var tt2 = new Array();

function light(q) {
opac[q]+=2;
document.getElementById(pict[q]).style.filter="alpha(opacity="+opac[q]+")";
tt[q] = setTimeout("light("+q+")",30);
if (opac[q]==100) clearTimeout(tt[q]);
};

function unlight(q) {
if (opac[q]!=30) opac[q]-=2;
document.getElementById(pict[q]).style.filter="alpha(opacity="+opac[q]+")";
tt2[q] = setTimeout("unlight("+q+")",30);
if (opac[q]==30) clearTimeout(tt2[q]);
};
< /script>

Разберем дословно каждую строку кода. Во-первых, для изменения яркости объекта ( рисунка) мы используем фильтр alpha(opacity=n), где n - процентное значение яркости объекта (при n=100 рисунок отображается как есть).

opac - массив, содержащий текущие значения параметров n для фильтра для каждого объекта.

pict - массив, содержащий идентификаторы (имена) рисунков (т.е. параметр свойства < img name='имя русунка'...).

Нетрудно дагадаться, что количество элементов в массивах opac и pict должно совпадать с количеством рисунков.

Массивы tt и tt2 будут содержать идентификаторы таймеров, о которых мы поговорим ниже.

< img src='dahlia.jpg' onmouseover='clearTimeout(tt2[0]); light(0)' onmouseout='clearTimeout(tt[0]); unlight(0)' name=al1 style='filter: alpha(opacity=30)'>

< img src='scabious.jpg' onmouseover='clearTimeout(tt2[1]); light(1)' onmouseout='clearTimeout(tt[1]); unlight(1)' name=al2 style='filter: alpha(opacity=30)'>

< img src='canna.jpg' onmouseover='clearTimeout(tt2[2]); light(2)' onmouseout='clearTimeout(tt[2]); unlight(2)' name=al3 style='filter: alpha(opacity=30)'>

< img src='orange.jpg' onmouseover='clearTimeout(tt2[3]); light(3)' onmouseout='clearTimeout(tt[3]); unlight(3)' name=al4 style='filter: alpha(opacity=30)'>

При наведении указателя мыши на картинку вызывается обработчик событий OnMouseOver и выполняются следующие действия: прекращается работа таймера и выполняется функция Light(q), где q - порядковый номер картинки. Рассмотрим подробно данную функцию.
<pre>opac[q]+=2

указывает, что яркость картинки по данному порядковому номеру увеличивается на 2.

document.getElementById(pict[q]).style.filter="alpha(opacity="+opac[q]+")"

непосредственно изменяет яркость картинки в зависимости от ее порядкового номера (q) и значения ее яркости (opac[q]).

tt[q] = setTimeout("light("+q+")",30)

создает таймер, который будет выполнять процедуру Light[q] с частотов в 0,03 секунды.

if (opac[q]==100) clearTimeout(tt[q])

проверят, достигло ли значение яркости картинки 100%, если да, то прекращает выполнение процедуры (уничтожает таймер).

Если убрать указатель мыши с картинки, то будет выполнен обработчик событий OnMouseOut. Данный обработчик запускает на выполнение процедуру Unlight(q). Данная функция выполняет аналогичные действия, что и функция Light(q), но в отличие от нее не повышает, а понижает яркость картинки:

opac[q]-=2

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

if (opac[q]==30) clearTimeout(tt2[q])

Вы можете по своему усмотрению изменять, с какой частотой будут выполнятся функции, на сколько процентов будут увеличиваться или уменьшаться яркость картинки. Однако для создании плавного эффекта необходимо что бы функции выполнялись в пределах 0,02-0,05 секундах, а значение яркости изменялось в границах 2-5 процентов.



Постоянные ссылки

При копировании ссылка на TeaM RSN обязательна!

URI

Html (ЖЖ)

BB-код (Для форумов)

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.