Fader funktioniert zeigt aber Fehler an (iE)

AKM<2b>

Erfahrenes Mitglied
Also ich habe hier einen Fader gebastelt der Layer ein und ausblendet wenn man mit der Mouse drüber fährt. Es funktioniert auch alles so wie es soll nur zeigt er mir im IE unten das gelbe Fehlersymbol an. Was ja nicht so schön ist.
Ich komm nicht drauf was es ist ? Ideen

PHP:
<html> 
<head>
<script language="JavaScript"> 
//fade in 
ie5 = (document.all && document.getElementById); 
ns6 = (!document.all && document.getElementById); 
opac = 0; 

function fadein(obj) { 
if(opac < 100){ 
opac+=1;
if(ie5) document.getElementById(obj).filters.alpha.opacity = opac; 
if(ns6) document.getElementById(obj).style.MozOpacity = opac/100; 
timerin = setTimeout("fadein('" + obj + "')",10);
} 
} 

//fade out 
ie5 = (document.all && document.getElementById); 
ns6 = (!document.all && document.getElementById); 
if(ie5) opac = document.getElementById(obj).filters.alpha.opacity; 
if(ns6) opac = document.getElementById(obj).style.MozOpacity;

function fadeout(obj) { 
if(opac != 0){ 
opac+=-1; 
if(ie5) document.getElementById(obj).filters.alpha.opacity = opac; 
if(ns6) document.getElementById(obj).style.MozOpacity = opac/100; 
timerout = setTimeout("fadeout('" + obj + "')",10);
} 
} 
</script> 
</head> 

<body > 

<div id="nameoflayer" onmouseover="fadein('nameoflayer'); clearTimeout(timerout);" onmouseout="fadeout('nameoflayer'); clearTimeout(timerin);" style="position:absolute; left:100px; top:150px; width:100px; height:100px; clip:rect(0,100,100,0); filter: alpha(opacity=0); -moz-opacity:0%; background-color:red; z-index:1"> 
</div> 

</body> 
</html>

Danke für eure Hilfe
2b
 
Zum einen sorgen folgende Zeilen beim Laden der Seite für einen Fehler:
Code:
if(ie5) opac = document.getElementById(obj).filters.alpha.opacity;
if(ns6) opac = document.getElementById(obj).style.MozOpacity;
das 'obj' ist nur innerhalb der Funktionen vorhanden...daher der Fehler,....
dann gibts noch nen Fehler,weil beim ersten Mouseover 'timerout' noch nicht bekannt ist


Code:
<script language="JavaScript">

//fade in
ie5 = (document.all && document.getElementById);
ns6 = (!document.all && document.getElementById);
opac= 0;
var timerout;

function fadein(obj) {
if(opac < 100){
opac+=1;
if(ie5) document.getElementById(obj).filters.alpha.opacity = opac;
if(ns6) document.getElementById(obj).style.MozOpacity = opac/100;
timerin = setTimeout("fadein('" + obj + "')",10);
}
}

function fadeout(obj) {
if(ie5) opac = document.getElementById(obj).filters.alpha.opacity;
if(ns6) opac = document.getElementById(obj).style.MozOpacity;
if(opac != 0){
opac+=-1;
if(ie5) document.getElementById(obj).filters.alpha.opacity = opac;
if(ns6) document.getElementById(obj).style.MozOpacity = opac/100;
timerout = setTimeout("fadeout('" + obj + "')",10);
}
}
</script>
sorum bleibt der Fehler aus: :)
 
Danke fatalus. :)

Die fehler hätte ich nie gefunden.

Ich als extrem javascript-Neuling finds total schlecht das einem der Browser nie konkrete Fehlermeldungen ausgibt. Gibts da irgendwie sowas wie einen javascript-Debugger? Ich hab echt keinen Plan davon würde die Arbeit aber sicher extrem erleichtern.

2b
 
Hi AKM,

Da muss ich die Browser in Schutz nehmen....sie geben schon Fehlermeldungen aus...allerdings nur dann,wenn sie sollen. Für den Ottonormalsurfer wäre es ja wenig prickelnd, wenn bei jedem Fehler nen Meldungsfenster kommt.

Wenn du im IE auf das gelbe Icon klickst,bekommst du eine detailliertere Fehlermeldung....
die ist nicht immer sehr aufschlussreich,aber immerhin :)
Eigentlich haben alle Browser so etwas eingebaut....
  • im Netscape4 musst du "javascript:" in die Adresszeile eingeben
  • in Opera gibts die Option "Skriptfehler anzeigen" im Menu
  • in Netscape6+ und Mozilla findest du unter "Tools" die Javascript-Konsole

Wenn du im IE unter Extras>Internetoptionen>Erweitert
die Option "Skriptdebugging deaktivieren" deaktivierst :-) , steht dir dort auch ein Debugger zur Verfügung(Microsoft Entwicklungsumgebung)....
der ist aber Geschmackssache...ich benutze das Teil nicht.
 
Mist die ganze sache funktioniert nur mit einem einzublendenden layer.

der killt immer die timeouts für alle.
gibts ne möglichkeit das zu umgehen. Hier mal ein copy & paste beispiel zum fehler angucken :


PHP:
<html> 
<head>




<script language="JavaScript"> 
//fades layer in 
//fade in
ie5 = (document.all && document.getElementById);
ns6 = (!document.all && document.getElementById);
opac= 0;
var timerout;

function fadein(obj) {
clearTimeout(timerout);
if(opac < 100){
opac+=2;
if(ie5) document.getElementById(obj).filters.alpha.opacity = opac;
if(ns6) document.getElementById(obj).style.MozOpacity = opac/100;
timerin = setTimeout("fadein('" + obj + "')",10);
}
}

function fadeout(obj) {
clearTimeout(timerin);
if(ie5) opac = document.getElementById(obj).filters.alpha.opacity;
if(ns6) opac = document.getElementById(obj).style.MozOpacity;
if(opac != 0){
opac+=-2;
if(ie5) document.getElementById(obj).filters.alpha.opacity = opac;
if(ns6) document.getElementById(obj).style.MozOpacity = opac/100;
timerout = setTimeout("fadeout('" + obj + "')",10);
}
}

</script> 
</head> 

<body > 

<div id="nameoflayer" onmouseover="fadein('nameoflayer'); " onmouseout="fadeout('nameoflayer'); 

clearTimeout(timerin);" style="position:absolute; left:100px; top:150px; width:100px; height:100px; 

clip:rect(0,100,100,0); filter: alpha(opacity=0); -moz-opacity:0%; background-color:red; z-index:1"> 
</div> 
<div id="pink" onmouseover="fadein('pink'); clearTimeout(timerout);" onmouseout="fadeout('pink'); 

clearTimeout(timerin);" style="position:absolute; left:200px; top:250px; width:100px; height:100px; 

clip:rect(0,100,100,0); filter: alpha(opacity=0); -moz-opacity:0%; background-color:red; z-index:1"> 
</div> 
</body> 
</html>
´

2b
 
Naja...ist ja kein Fehler :)

Du kannst für jeden Layer einen Array anlegen,in welchem du opacity,timrin und timrout speicherst.
Ist nicht weiter aufwendig,habs ins Skript hineingetan:
Code:
<script type="text/javascript">
<!--
ie5 = (document.all && document.getElementById&&!window.opera);
ns6 = (!document.all && document.getElementById&&!window.opera);
//Arrays fur opacity,fadein,fadeout

var params=new Array();
params['nameoflayer']	=new Array(0,'','');
params['pink']		=new Array(0,'','');


function fadein(obj) {
clearTimeout(params[obj][2]);
if(params[obj][0] < 100){
params[obj][0]+=2;
if(ie5) document.getElementById(obj).filters.alpha.opacity = params[obj][0];
if(ns6) document.getElementById(obj).style.MozOpacity = params[obj][0]/100;
params[obj][1]= setTimeout("fadein('" + obj + "')",10);
}
}

function fadeout(obj) {
clearTimeout(params[obj][1]);
if(ie5) params[obj][0] = document.getElementById(obj).filters.alpha.opacity;
if(ns6) params[obj][0] = document.getElementById(obj).style.MozOpacity;
if(params[obj][0] != 0){
params[obj][0]+=-2;
if(ie5) document.getElementById(obj).filters.alpha.opacity = params[obj][0];
if(ns6) document.getElementById(obj).style.MozOpacity = params[obj][0]/100;
params[obj][2]= setTimeout("fadeout('" + obj + "')",10);
}
}
//-->
</script>

Die Arrays sehen immer gleich aus:
Code:
params['Layername']	=new Array(0,'','');

Im Skript kannst du denn auf den zu dem entsprechenden Layer gehörigen Wert zugreifen.

Die Variablen timerin,timerout und opacity gibts nicht mehr,um an die entsprechenden Werte zu gelangen,
musst du jetzt die Arrays auslesen:
opacity => params[obj][0]
fadein => params[obj][1]
fadeout => params[obj][2]

Solltest du eine Fehlermeldung erhalten,liegt es wahrscheinlich daran,dass du beim Funktionsaufruf in den Layern
noch die alten clearTimeout's zu stehen hast....die brauchst du da aber nicht mehr,da der clearTimeout ja in der Funktion erfolgt.
 
Zuletzt bearbeitet:
fatalus du bist so krass ... ich meine das kostet dich doch bestimmt zeit hier mal eben so ein script zu schreiben.

Hut ab. und recht herzlichen Dank
Jetzt kann ich unendlich viele layer faden...

Bist mein Held
2b
 

Neue Beiträge

Zurück