/**
* Запуск плавного изменение прозрачности элемента
*
* @param mixed node - целевой DOM-элемент или его ID
* @param int start - начальное значение прозрачности. От 0 (полностью прозрачный) до 100 (непрозрачный)
* @param int stop - окончательное значение
* @param int time - [optional] время изменения в мс. По умолчанию 1 000 (1 секунда)
* @param int tStep - [optional] интервал одного шага в мс. По умолчанию 100
* @param function handler - [optional] обработчик завершения процедуры
* @return int идентификатор, который можно использовать в clearInterval() для принудительного завершения
*/
function opacityOut(node, start, stop, time, tStep, handler)
{
if (typeof(node) != "object") {
node = document.getElementById(node);
}
time = time ? time : 1000;
tStep = tStep ? tStep : 100;
var sop = (stop - start) * tStep / time;
var op = start - sop;
function step()
{
op += sop;
if (((sop > 0) && (op > stop)) || ((sop < 0) && (op < stop))) {
op = stop;
clearInterval(timer);
if (handler) {
setTimeout(handler, 0);
}
}
var iop = Math.round(op);
node.style.opacity = iop / 100;
node.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=" + iop + ")";
return true;
}
step();
var timer = setInterval(step, tStep);
return timer;
}
Примеры:
/* Изменяем прозрачность элемент с ID="q" от 100% до 10% за 3 секунды */
opacityOut("q", 100, 10, 3000);
/* Гоняем по кругу элемент с ID="w" */
var wTimer;
function wDown()
{
wTimer = opacityOut("w", 100, 0, 1000, 100, wUp);
}
function wUp()
{
wTimer = opacityOut("w", 0, 100, 1000, 100, wDown);
}
wDown();
Остановить последнее безобразие можно щелчком по ссылке:
<a href="#" onclick="clearInterval(wTimer);return false;">stop W</a>