Можете посоветовать как улучшить эту функцию? Ведь eval - нехорошо... или нормально?
Если что не понятно - могу комментарии поставить. Но вроде и так все понятно.
var IE = /*@cc_on!@*/0;
function SmoothOpacity(Element, StartFrom, EndOn, Step, Speed, OnComplete){
IE?(Element.style.filter = 'alpha(opacity=' + StartFrom * 100 + ')'):(Element.style.opacity = StartFrom);
(StartFrom < EndOn)?(
Condition = 'EndOn > StartFrom'
):(
Condition = 'StartFrom > EndOn'
)
var NewCondition = Condition;
(function(){
if(eval(NewCondition)){
StartFrom += Step;
IE?(Element.style.filter = 'alpha(opacity=' + StartFrom * 100 + ')'):(Element.style.opacity = StartFrom);
setTimeout(arguments.callee, Speed);
}
else{ //Если уже прозрачность достигла желаемой цифры
IE?(Element.style.filter = 'alpha(opacity=' + EndOn * 100 + ')'):(Element.style.opacity = EndOn);
if(OnComplete != 'null'){
OnComplete(); //Можно выполнить какую-нибудь функцию... или не выполнять - 'null'
}
}
})();
};
//Вызывать так:
SmoothOpacity(document.getElementById('box'), 0, 1, .05, 90, 'null');
SmoothOpacity(document.body, 1, 0, -.08, 200, function(){alert('Done!')});