Her er en omskrivning, hvor der er taget højde for 3 problemstillinger:
- setInterval kører for evigt i baggrunden, som nidyahou skriver i #2
- Der er ikke beskyttelse mod at køre in og out samtidig, hvilket looper
- Vil alle browsere lave korrekt type konvertering af en style attribut så der kan regnes videre?
Ændret HTML linie:
<span onclick="fade('box', 'out');">FadeOut</span> <span onclick="fade('box', 'in');">FadeIn</span>
Helt nyt script:
var fadeWorking = false;
var speed = 10;
function fade(elementName, fadeType) {
if (fadeWorking == true) return;
var element = document.getElementById(elementName);
if(!element.style.opacity) {
if (fadeType == 'out' )
element.style.opacity = 1
else element.style.opacity = 0;
}
fadeWorking = true;
if (fadeType == 'out' )
fadeOut(elementName)
else fadeIn(elementName);
}
function fadeOut(elementName) {
var element = document.getElementById(elementName);
var opaFloat = parseFloat(element.style.opacity);
if(opaFloat > 0.0) {
element.style.opacity = opaFloat - 0.02;
setTimeout('fadeOut("'+elementName+'")', speed);
} else {
fadeWorking = false;
}
}
function fadeIn(elementName) {
var element = document.getElementById(elementName);
var opaFloat = parseFloat(element.style.opacity);
if(opaFloat < 1.0) {
element.style.opacity = opaFloat + 0.02;
setTimeout('fadeIn("'+elementName+'")', speed);
} else {
fadeWorking = false;
}
}
Det kan optimeres yderligere, men jeg har nok ikke tid idag:
- Bruge setInterval og clearInterval for bedre performance
- "Pakke" scriptet i et JSON-objekt for at undgå globale variable m.m.
- Sætte opacity fra starten i style, så initieringen kan udgå fra script.