Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Прерывается выполнение функции при смене аргумента (https://javascript.ru/forum/misc/12304-preryvaetsya-vypolnenie-funkcii-pri-smene-argumenta.html)

mikser763 11.10.2010 15:40

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

Как я понял при наведении на другой элемент, objId меняется и выполнение функции со старым objId прерывается. У кого-нибудь есть идеи как сделать?:help:

var hT, sT;
flag=1
function SmoothShow(objId, x) 
{ 
var obj = document.getElementById(objId);
op = (obj.style.opacity)?parseFloat(obj.style.opacity):parseInt(obj.style.filter)/100; 
 
if(op < x) 
{ 
clearTimeout(hT);
op += 0.1; 
obj.style.opacity = op; 
obj.style.filter='alpha(opacity='+op*100+')'; 
sT=setTimeout('SmoothShow(\''+objId+'\', '+x+')',50); 
} 
}
function SmoothHide(objId, x) 
{
var obj = document.getElementById(objId);
op = (obj.style.opacity)?parseFloat(obj.style.opacity):parseInt(obj.style.filter)/100; 
		 
if(op > x) 
{ 
	clearTimeout(sT);
	op -= 0.1; 
	obj.style.opacity = op; 
	obj.style.filter='alpha(opacity='+op*100+')'; 
	hT=setTimeout('SmoothHide(\''+objId+'\', '+x+')',50); 
}
}

exec 11.10.2010 16:36

function fxFade( element, from, to, time, delta, callback ) {
	delta = delta || function (x) {
		return x;
	};
	var IE = document.all && !window.opera,
	start = new Date().getTime();
	if (IE) {
		from *= 100,
		to *= 100;
	}
	element.fadeTimer = setTimeout(function () {
		var progress = (new Date().getTime() - start) / time,
		result = (to - from) * delta(progress) + from;
		if (IE) {
			element.style.filter = "alpha(opacity=" + result + ")";
		} else {
			element.style.opacity = result;
		}
		if (progress < 1) {
			element.fadeTimer = setTimeout(arguments.callee, 10);
		} else {
			callback && callback();
		}
	}, 10);
}


// 1 — начальное значение, 0 — конечное, 1000 — время
fxFade( document.getElementById("foo"), 1, 0, 1000 );


Часовой пояс GMT +3, время: 00:24.