Toon posts:

[DHTML] Menuitem FadeIn met Mozilla (MozOpacity)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil graag dat zowel in Mozilla als IE ik een fade menu krijg. In IE is dit geen probleem maar in Mozilla gaat het al moeilijker. Hij is onvoorspelbaar en zonder een echte reden doet hij het wel en de andere keer niet. Ook flikkert het beeld in Mozilla.

Zoals je ziet gebruik ik prototyping omdat anders de boel in een later stadium aangepast moet worden. Verder heeft prototyping het voordeel dat ik per menuitem variabelen kan onthouden.

Het laatste wat ik geprobeerd heb is een container div die de onmouseout nog eens benadrukt, maar dit werkt ook nog niet helemaal goed. Wel beter dan de eerste keer.


Mijn Code:
edit:
1. al meerdere malen aangepast door opmerkingen uit het forum

edit:
2. Nu op array basis ipv prototyping

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<html>
<head>
    <title>FadeTest</title>
    <style>
    div.fader{
        font-weight:bold;
        font-size:12pt;
        text-align:center;
        padding:10px;
    }
    </style>
<script>
    // Browser Check
    ie5 = (document.all && document.getElementById);
    ns6 = (!document.all && document.getElementById);   
            
    function initFader(arrFaders){
        for(var i = 0; i < arrFaders.length; i++){
            var fader = arrFaders[i];
            var id = fader[0];
            var opac = fader[1];
            var txt = fader[2];
            var width = fader[3];
            var height = fader[4];
            var color = fader[5];
            
            var newdiv = document.createElement('DIV');
            newdiv.id = id;
            newdiv.className = "fader";
            newdiv.opac = newdiv.startopac = opac;
            newdiv.appendChild(document.createTextNode(txt));
            newdiv.style.width = width;
            newdiv.style.height = height;
            newdiv.style.backgroundColor = color;
            newdiv.onmouseover = function(){fadeIn(this.id)};
            newdiv.onmouseout = function(){fadeOut(this.id)};
            
            
            if(ie5) newdiv.style.filter = filter="Alpha(opacity="+opac+")";
            if(ns6) newdiv.style.MozOpacity = opac/100;
                        
            document.body.appendChild(newdiv);
            
            glFaders[id] = newdiv;          
        }   
    }
    
    function fadeIn(id) {
        
        var fader = glFaders[id];
        if(fader.timer)clearTimeout(fader.timer);           
        if(fader.opac < 99){                
            fader.opac+=10;
            fader.innerHTML = fader.opac;
            if(ie5) fader.style.filter="Alpha(opacity="+fader.opac+")";
            if(ns6) fader.style.MozOpacity = fader.opac/100;                    
            
            fader.timer = setTimeout(function(){fadeIn(id)}, 20);
        }       
    }
    
    function fadeOut(id){
        var fader = glFaders[id];
        if(fader.timer)clearTimeout(fader.timer);
        if(fader.opac > fader.startopac){               
            fader.opac-=5;
            fader.innerHTML=fader.opac;             
            if(ie5) fader.style.filter="Alpha(opacity="+fader.opac+")";
            if(ns6) fader.style.MozOpacity = fader.opac/100;                    
            fader.timer = setTimeout(function(){fadeOut(id)}, 20);
        }
    }
        
    
</script>
</head>

<body>
<h1>Fading menu for Mozilla and IE</h1>
<script>
    var arrFaders = [
        ["test1",19,"Test Div 1",90,80,"red"],
        ["test2",19,"Test Div 2",110,110,"blue"],
        ["test3",19,"Test Div 3",80,90,"green"]
    ];  
    
    glFaders = new Array();
    initFader(arrFaders);
</script>

</body>
</html>

[ Voor 110% gewijzigd door Verwijderd op 30-12-2003 10:53 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

Het script hapert sowieso nog aan alle kanten, ga maar es snel op een blokje en dan er nog sneller vanaf. Op dat moment fade hij niet weg. Ook als je met je muis heel snel over de 3 blokjes heen en weer gaat, gaat het fout.

Voor ie5+ voldoet style.filter="Alpha(opacity=50)" volgens mij.

En wat betreft je timers: als er een onmouseout/over plaatsvind moet je of met meerdere timers gaan werken (voor elk blok 1) of je timer clearen en opnieuw starten.

Wat je zegt crisp klopt idd. Alleen het clearen van de timer zie ik niet gebeuren.

[ Voor 11% gewijzigd door André op 29-12-2003 17:58 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:46

crisp

Devver

Pixelated

hij houdt de timers bij in de objecten zelf, dus dat zit volgens mij wel goed. Ik zou zelf wel als eerste de boel herstructureren zodat die lelijke evals eruit kunnen....

Intentionally left blank


Verwijderd

Topicstarter
Het klopt dat het nu rammelt, maar dat komt omdat ik al op er allerlei manieren heb geprobeerd het werkend te krijgen. Doordat wordt het indd wat minder mooi allemaal. Maar het principe is goed, je kan het simpeler doen maar dan krijg je weer andere problemen en die zijn nu weggewerkt.

de eval's heb je nodig, want je kan niet met this werken. internet explorer gaat dan over zijn nek en alle objecten gaan door elkaar heen. probeer dat maar eens. Je moet wel. Verder hou ik mijn timer bij in het object this.timer is de naam van de timer. this.opac is de huidige opacity.

  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

Verwijderd schreef op 29 december 2003 @ 18:05:
de eval's heb je nodig, want je kan niet met this werken. internet explorer gaat dan over zijn nek en alle objecten gaan door elkaar heen. probeer dat maar eens. Je moet wel. Verder hou ik mijn timer bij in het object this.timer is de naam van de timer. this.opac is de huidige opacity.
eval is nooit nodig en is vies.

Verwijderd

Topicstarter
André schreef op 29 december 2003 @ 18:09:
[...]

eval is nooit nodig en is vies.
mee eens, maar hier is het wel nodig. het Moet zelfs.

als jij de IE bug eruit wil halen dat hij de this'en door elkaar haalt.

  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

Verwijderd schreef op 29 december 2003 @ 18:11:
[...]


mee eens, maar hier is het wel nodig. het Moet zelfs.

als jij de IE bug eruit wil halen dat hij de this'en door elkaar haalt.
Als jij gewoon dit doet:
JavaScript:
1
2
3
4
//this.timer = setTimeout(function(){eval(id).fadeIn(id)}, 20);

Faders[this.id] = this;
this.timer = setTimeout("Faders[" + this.id + "].fadeIn()", 20);

Maar dan moet je wel een array hebben waar alle faders in staan.

[ Voor 17% gewijzigd door André op 29-12-2003 18:17 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:46

crisp

Devver

Pixelated

André schreef op 29 december 2003 @ 18:16:
[...]

Als jij gewoon dit doet:
JavaScript:
1
2
3
4
//this.timer = setTimeout(function(){eval(id).fadeIn(id)}, 20);

Faders[this.id] = this;
this.timer = setTimeout("Faders[" + this.id + "].fadeIn()", 20);

Maar dan moet je wel een array hebben waar alle faders in staan.
globals kan je al als een soort van array-element benaderen; ze zijn immers property van het window object ;)

Intentionally left blank


  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

Verwijderd schreef op 29 december 2003 @ 18:11:
[...]


mee eens, maar hier is het wel nodig. het Moet zelfs.

als jij de IE bug eruit wil halen dat hij de this'en door elkaar haalt.
Die bug kende ik niet, wat is precies de bug dan?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:46

crisp

Devver

Pixelated

als ik een div creëer en daar een mouseover en mouseout event aan koppel:

JavaScript:
1
2
3
4
5
6
var newdiv = document.createElement('DIV');
newdiv.appendChild(document.createTextNode('text'));
newdiv.className = 'cssClass';
newdiv.startopac = 20;
newdiv.onmouseover = fadein;
newdiv.onmouseout = fadeout;


dan kan ik in de functies fadein() en fadeout() gewoon met this werken...
Echter draait setTimeout inderdaad niet in de scope van je object, dus moet je wel iets van een referentie hebben, en het liefst die referentie in een global var of array stoppen om alteveel lookups te voorkomen; je krijgt dan zoiets:

JavaScript:
1
2
newdiv.onmouseover = 'fadein('+referentie+')';
globalarray[referentie] = newdiv;


JavaScript:
1
2
3
4
5
6
7
8
9
10
function fadein(ref) {

  var el = globalarray[ref];
  var opac = el.getAttribute('startopac');

  // do stuff

  setTimeout('fadein('+ref+')', 20);

}


prototyping is leuk, maar met timers niet handig...
maar goed, zelfs in jouw geval zou je
JavaScript:
1
eval(id).fadeIn(id);

kunnen vervangen door
JavaScript:
1
window[id].fadeIn(id);

[ Voor 57% gewijzigd door crisp op 29-12-2003 19:05 ]

Intentionally left blank


  • Johnny
  • Registratie: December 2001
  • Laatst online: 13:29

Johnny

ondergewaardeerde internetguru

Ik heb pas nog een tutorial/script over zoiets gemaakt.

http://www.brainerror.net/scripts_js_blendtrans.php

Die flikkering in Mozilla komt doordat een gedeeltelijk transparant plaatje wordt omgezet naar een geheel zichtbare, totdat deze "bug" verbeterd is kun je het voorkomen door de opacity niet verder dan 0.99 te laten gaan.

Edit: typo's

[ Voor 5% gewijzigd door Johnny op 29-12-2003 20:15 ]

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Verwijderd

Topicstarter
André schreef op 29 december 2003 @ 18:23:
[...]

Die bug kende ik niet, wat is precies de bug dan?
Ik heb mijn scriptje aangepast nu zie je dat hij het wel goed doet. ik had in het testen de clearTimeout functie gecomment. Je ziet nu ook de waarden van de opacity in de divs als debugging.


Het probleem dat ik nu met mozilla heb is hier ook:
http://www.geocrawler.com/archives/3/123/2002/8/0/9321409/

de bug met IE is:
grrr.. kan de link hier niet vinden. Maar ik kan het wel uitleggen. Als je met setTimeout(function(),20) doet met meerdere objecten die moeten faden dan gaan ze door elkaar. Dus je moet met objecten en prototypes werken zodat ieder zijn opacity aantal krijg. Je krijgt dan dus setTimeout(this.function(),20). maar this.function() werkt niet. want this is onbekend en de objecten gaan door elkaar. setTimeout(function(){objectnaam.function(),20} werkt hier wel.

Wat is mijn oplossing. je geeft de naam van het object dezelfde als de id van het element dat je wil faden. Dit werkt goed. object Test1 heeft een div die <div id="Test1" heet. Met eval(idnaam) pak je dus het juiste object. dat ze hetzelfde heten is voor de handigheid gedaan, anders heb je dubbele namen en dat is vervelend. Als je met getElementById zou werken dan krijg je het HTML element <div> terug maar dat je wil je niet, je wil het object terug. eval pakt die dan zodat je altijd in het juiste object zit. Ik hoop dat het zo duidelijk is. Jouw methode met een array met alle objectnamen erin zal ik even implementeren want ik denk dat dat wel iets netter is dan overal eval() te gebruiken.

Verwijderd

Topicstarter
crisp schreef op 29 december 2003 @ 18:44:

prototyping is leuk, maar met timers niet handig...
maar goed, zelfs in jouw geval zou je
JavaScript:
1
eval(id).fadeIn(id);

kunnen vervangen door
JavaScript:
1
window[id].fadeIn(id);
Owja, dat is natuurlijk ook mogelijk.

  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

Oooooh dat, is dat een bug? Zo heb ik er nooit tegen aan gekeken, ik gebruikte altijd de manier zoals ik eerder al had aangegeven.

Verwijderd

Topicstarter
Johnny schreef op 29 december 2003 @ 19:15:
Ik heb pas nog een tutorial/script over zoiets gemaakt.

http://www.brainerror.net/scripts_js_blendtrans.php

Die flokkering in Mozilla komt doordat een gedeeltelijk transparant plaatje wprdt omgezet naar een geheel zichtbare, totdat deze "bug" verbeterd is kun je het voorkomen door de opacity niet verder dan 0.99 te laten gaan.
Briljant! bedankt.
edit:

ik dacht dat hij het deed, maar mozilla blijft nog steeds onvoorspelbaar hangen.

[ Voor 73% gewijzigd door Verwijderd op 29-12-2003 20:04 ]


Verwijderd

Topicstarter
André schreef op 29 december 2003 @ 19:50:
Oooooh dat, is dat een bug? Zo heb ik er nooit tegen aan gekeken, ik gebruikte altijd de manier zoals ik eerder al had aangegeven.
tja bug, misschien zou je het logisch uit kunnen leggen, maar als ik zeg this.function() dan wil ik graag dat hij in zijn eigen scope blijft. Dat doet hij dus niet, ik ging uit van een bug want ik zou het logisch vinden als hij dat wel doet.

  • André
  • Registratie: Maart 2002
  • Laatst online: 26-05 00:33

André

Analytics dude

PS. Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/got/images/icons/edit.gif

Verwijderd

Topicstarter
Johnny schreef op 29 december 2003 @ 19:15:
Ik heb pas nog een tutorial/script over zoiets gemaakt.

http://www.brainerror.net/scripts_js_blendtrans.php

Die flokkering in Mozilla komt doordat een gedeeltelijk transparant plaatje wprdt omgezet naar een geheel zichtbare, totdat deze "bug" verbeterd is kun je het voorkomen door de opacity niet verder dan 0.99 te laten gaan.
een aantal in de tutorial werken niet helemaal 100% geloof ik. faden van verschillende plaatjes werkt niet helemaal goed in IE.

  • Johnny
  • Registratie: December 2001
  • Laatst online: 13:29

Johnny

ondergewaardeerde internetguru

Verwijderd schreef op 29 december 2003 @ 19:59:
[...]


een aantal in de tutorial werken niet helemaal 100% geloof ik. faden van verschillende plaatjes werkt niet helemaal goed in IE.
Dat heeft te maken met het niet geladen zijn van de afbeeldingen, ik heb daarom even een alinea over toegevoegd, ik zal ook een waarschuwing over die onmouseover bug in Mozilla er in zetten en de manier om het flikkeren tegen te gaan.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Verwijderd

Topicstarter
Johnny schreef op 29 december 2003 @ 20:06:
[...]


Dat heeft te maken met het niet geladen zijn van de afbeeldingen, ik heb daarom even een alinea over toegevoegd, ik zal ook een waarschuwing over die onmouseover bug in Mozilla er in zetten en de manier om het flikkeren tegen te gaan.
het flikkeren is trouwens nog niet helemaal weg, het helpt wel, en is minder maar helemaal weg is het nog niet. als ik van 0.19 naar 0.99 ga, dan flikkert hij nog steeds af en toe.

ps. het trouwens alleen als je van 1 fader naar een ander gaat, Als je 1 voor 1 doet dan flikkert hij niet.

[ Voor 10% gewijzigd door Verwijderd op 29-12-2003 20:20 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:46

crisp

Devver

Pixelated

toch heb je dat prototyping helemaal niet nodig zoals ik al eerder trachtte uit te leggen; voor dit soort dingen is dat alleen maar balast en vreet het onnodig performance. In lemmings heb ik de timer-related functies ook niet met methods van het lemming-object opgelost omdat het gewoon te traag zou worden dan...

Intentionally left blank


Verwijderd

Topicstarter
crisp schreef op 29 december 2003 @ 21:05:
toch heb je dat prototyping helemaal niet nodig zoals ik al eerder trachtte uit te leggen; voor dit soort dingen is dat alleen maar balast en vreet het onnodig performance. In lemmings heb ik de timer-related functies ook niet met methods van het lemming-object opgelost omdat het gewoon te traag zou worden dan...
Ik snap door jouw uitleg dat ik het niet perse nodig heb als ik alles in een globalarray gooi. Ik zal het morgen eens doen zoals je zei en kijken of het scheelt qua performance en of mozilla er beter op reageert (dat was het hoofdprobleem en dat is nog steeds niet opgelost). Ik heb het idee dat MozOpacity zijn focus verliest en daardoor de onmouseout niet meer pakt.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:46

crisp

Devver

Pixelated

Verwijderd schreef op 29 december 2003 @ 23:03:
[...]


Ik snap door jouw uitleg dat ik het niet perse nodig heb als ik alles in een globalarray gooi. Ik zal het morgen eens doen zoals je zei en kijken of het scheelt qua performance en of mozilla er beter op reageert (dat was het hoofdprobleem en dat is nog steeds niet opgelost). Ik heb het idee dat MozOpacity zijn focus verliest en daardoor de onmouseout niet meer pakt.
Je gooit het nu ook al in 3 globals (test1, test2 en test3), een array is enkel makkelijker wb verwijzingen.
Als ik tijd heb zal ik ook eens een opzetje maken...

Intentionally left blank


Verwijderd

Topicstarter
crisp schreef op 29 december 2003 @ 23:31:
[...]

Je gooit het nu ook al in 3 globals (test1, test2 en test3), een array is enkel makkelijker wb verwijzingen.
Als ik tijd heb zal ik ook eens een opzetje maken...
Ik heb de code herschreven op array basis. zie de code eerste post, ik weet nog niet of ik het mooier vind deze manier. Wat ik wel heb ontdekt is dat mozilla anders reageert als je de inhoud wijzigt na de opacity change. Hij flikkert nu zelden en hij blijft niet meer hangen. Dus ik dat ik met deze workaround een heel eind kom.

p.s. de code hieronder is ongeveer hetzelfde indd als mijn herschreven code :) en exact op hetzelfde moment gepost.

[ Voor 9% gewijzigd door Verwijderd op 30-12-2003 10:52 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:46

crisp

Devver

Pixelated

ok, werkend opzetje:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<html>
<head>
<title>fading buttons</title>
<style type="text/css">

div.fader {
  width: 100px;
  height: 20px;
  filter: alpha(opacity=19);
  -moz-opacity: 0.19;
}

div.border {
  width: 100%;
  height: 100%;
  text-align: center;
  font-weight: bold;
  border: 1px solid black;
}

</style>
<script type="text/javascript">

var faders = [];

function makeFaders() {

  var i = 0;
  while (i < 3) {
    faders[i] = new Fader(i);
    i++;
  }

}

function Fader(i) {

  this.opac = 19;
  this.timer = null;

  var newdiv = document.createElement('DIV');
  newdiv.className = 'fader';
  newdiv.onmouseover = function(){fadein(i)};
  newdiv.onmouseout = function(){fadeout(i)};
  var innerdiv = document.createElement('DIV');
  innerdiv.className = 'border';
  innerdiv.appendChild(document.createTextNode('text'));
  newdiv.appendChild(innerdiv);
  document.body.appendChild(newdiv);

  this.div = newdiv;

}

function fadein(i) {

  var el = faders[i];
  if (el.timer != null) clearTimeout(el.timer);

  if (el.opac < 99) {
    el.opac += 10;
    el.div.style.filter = 'alpha(opacity='+el.opac+')';
    el.div.style.MozOpacity = el.opac/100;
    el.timer = setTimeout('fadein('+i+')',40);
  } else {
    el.timer = null;
  }

}

function fadeout(i) {

  var el = faders[i];
  if (el.timer != null) clearTimeout(el.timer);

  if (el.opac > 19) {
    el.opac -= 10;
    el.div.style.filter = 'alpha(opacity='+el.opac+')';
    el.div.style.MozOpacity = el.opac/100;
    el.timer = setTimeout('fadeout('+i+')',40);
  } else {
    el.timer = null;
  }

}

</script>
</head>
<body onload="makeFaders()">
</body>
</html>


de geneste div is omdat als ik een border op de buitenste div zette er in IE5.5 al meteen een mouseout werd getriggered na een mouseover, en zo heb je ook geen last van boxmodel verschillen :)

Intentionally left blank


Verwijderd

@crisp/TS,

Wellicht leuk om KhtmlOpacity (sp?) (CSS: -khtml-opacity) toe te voegen voor Safari + Konquerer?

Verwijderd

Topicstarter
Verwijderd schreef op 30 december 2003 @ 11:17:
@crisp/TS,

Wellicht leuk om KhtmlOpacity (sp?) (CSS: -khtml-opacity) toe te voegen voor Safari + Konquerer?
Ik heb khtml ondersteuning in deze speedtest versie gebouwt. Het is zo traag als dikke str*nt. Ik word er niet vrolijk van. Verder had ik ook problemen met het doorgeven van functies via settimeout. Ik laat hem nu zonder de settimeout de functie's uitvoeren en zelfs dat gaat zeer traag.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<html>
<head>
    <title>FadeTest</title>
    <style>
    div#container{
        position:relative;
        width:100%;
        height:400px;
        border:1px black solid;
        background-color:whitesmoke;
    }
    
    div.fader{
        font-weight:bold;
        font-size:12pt;
        text-align:center;      
        position:absolute;
        filter: alpha(opacity=19);
        -khtml-opacity:0.19;
        -moz-opacity:0.19;
        
    }
    
    </style>
<script>
    // Browser Check
    ie5 = (document.all && document.getElementById);
    ns6 = (!document.all && document.getElementById);
    khtml = (document.childNodes && !document.all && !navigator.taintEnabled)
    
    glFaders = new Array();
    
    var arrFaders = [
        ["test1",19,"1",90,80,"red"],
        ["test2",19,"2",110,110,"blue"],
        ["test3",19,"3",80,90,"green"],
        ["test4",19,"4",90,80,"yellow"],
        ["test5",19,"5",110,110,"gray"],
        ["test6",19,"6",80,90,"black"],
        ["test7",19,"7",90,80,"orange"],
        ["test8",19,"8",110,110,"purple"],
        ["test9",19,"9",80,90,"wheat"],
        ["test10",19,"10",80,90,"#333399"],
        ["test11",19,"11",90,80,"red"],
        ["test12",19,"12",110,110,"blue"],
        ["test13",19,"13",80,90,"green"],
        ["test14",19,"14",90,80,"yellow"],
        ["test15",19,"15",110,110,"pink"],
        ["test16",19,"16",80,90,"black"],
        ["test17",19,"17",90,80,"orange"],
        ["test18",19,"18",110,110,"purple"],
        ["test19",19,"19",80,90,"#ff6600"],
        ["test20",19,"20",80,90,"#9933ff"]
    ];  
        
    function initFader(arrFaders){
        var leftspace = 0;
        var topspace = 0;
        for(var i = 0; i < arrFaders.length; i++){
            
            var fader = arrFaders[i];
            
            var id = fader[0];
            var opac = fader[1];
            var txt = fader[2];
            var width = fader[3];
            var height = fader[4];
            var color = fader[5];
            
            var newdiv = document.createElement('DIV');
            newdiv.id = id;
            newdiv.className = "fader";
            newdiv.opac = newdiv.startopac = opac;
            newdiv.appendChild(document.createTextNode('nr:' + txt));
            newdiv.style.width = width;
            newdiv.style.height = height;
            newdiv.style.backgroundColor = color;                       
                        
            if(i%4==0 && i!=0){
                leftspace+=80;topspace=0;
                newdiv.style.top = topspace;
                topspace += height;
            }
            else{
                newdiv.style.top = topspace;
                topspace += height;
            }           
            newdiv.style.left = leftspace;  
                                
            newdiv.onmouseover = function(){fadeIn(this.id)};
            newdiv.onmouseout = function(){fadeOut(this.id)};
                    
            if(ie5)  newdiv.style.filter = filter="Alpha(opacity="+opac+")";
            if(ns6)  newdiv.style.MozOpacity = opac/100;
            if(khtml)newdiv.style.setProperty('-khtml-opacity',newdiv.opac/100);
            
            var cont = document.getElementById('container');
            cont.appendChild(newdiv);
            
            glFaders[id] = newdiv;          
        }   
    }
    
    function fadeIn(id) {
        
        var fader = glFaders[id];
        
        if(fader.timer)clearTimeout(fader.timer);           
        if(fader.opac < 99){                
            fader.opac+=10;
            fader.innerHTML = fader.opac;
            if(ie5)  fader.style.filter="Alpha(opacity="+fader.opac+")";            
            if(ns6)  fader.style.MozOpacity = fader.opac/100;
            if(khtml)fader.style.setProperty('-khtml-opacity',fader.opac/100);
            if(khtml)fadeIn(id);
            else fader.timer = setTimeout(function(){fadeIn(id)}, 20);
        }       
    }
    
    function fadeOut(id){
        var fader = glFaders[id];
        if(fader.timer)clearTimeout(fader.timer);
        if(fader.opac > fader.startopac){               
            fader.opac-=10;
            fader.innerHTML=fader.opac;             
            if(ie5)  fader.style.filter="Alpha(opacity="+fader.opac+")";
            if(ns6)  fader.style.MozOpacity = fader.opac/100;
            if(khtml)fader.style.setProperty('-khtml-opacity',fader.opac/100);
            if(khtml)fadeOut(id);
            else fader.timer = setTimeout(function(){fadeOut(id)}, 20);
        }
    }
        
    
</script>
</head>

<body onLoad="initFader(arrFaders)">
<h1>Fading menu for Mozilla and IE</h1>
<div id="container"></div>
</body>
</html>
Pagina: 1