[javascript] Probleem met m'n menu...

Pagina: 1
Acties:

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Hey lui,

ik weet niet echt hoe NS met javascript omgaat, ik testte eerder erg weinig in NS, maar voor de nieuwe layout van cc wil ik het wel voor elkaar krijgen dat hij in NS ook perfect werkt, dat is wel een vereiste eigenlijk, ondanks dat velen zeuren blijven er altijd nog wel lui die NS gebruiken...

Dit is m'n functie om een drop down menuutje op dit moment weer te geven, alleen hij werkt nog niet in netscape, er gebeurt dan totaal niks als ik over een menu item heen ga.
code:
1
2
3
4
5
6
7
8
9
10
11
12
ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false

function show(id,vanbr) {
  cent=(ie4)?document.body.offsetWidth-4:innerWidth;
  cent = cent/2;
  plaats=cent-vanbr;
  if (ns4) document.layers[id].visibility = "show"
  else if (ie4) document.all[id].style.visibility = "visible"
  if (ns4) document.layers[id].left = plaats
  else if (ie4) document.all[id].style.left = plaats
}

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

move w > w&g

Klaar voor een nieuwe uitdaging.


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
niemand? ;(

Verwijderd

Meer code, please.

Probeer anders eens window.innerWidth i.p.v. innerWidth...

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 20:06

RM-rf

1 2 3 4 5 7 6 8 9

Op dinsdag 06 november 2001 09:05 schreef Tangletje het volgende:
code:
1
2
3
4
5
6
7
8
9
function show(id,vanbr) {
  cent=(ie4)?document.body.offsetWidth-4:innerWidth;
  cent = cent/2;
  plaats=cent-vanbr;
  if (ns4) document.layers[id].visibility = "show"
  else if (ie4) document.all[id].style.visibility = "visible"
  if (ns4) document.layers[id].left = plaats
  else if (ie4) document.all[id].style.left = plaats
}
snelle gok
code:
1
2
3
4
5
6
7
8
9
function show(id,vanbr) {
  thisElement = (ie4)?document.all[id]:document.layers[id]
  top = (ie4)?thisElement.posTop:thisElement.top
  left=(ie4)?document.body.offsetWidth-4:window.innerWidth;
  left = left/2-vanbr;
  if (ns4) document.layers[id].visibility = "show"
  else if (ie4) document.all[id].style.visibility = "visible"
  thisElement.moveTo(left, top)
}

an sich wil het nog wel wereken om wat separate functietjes te maken voor show/hiden layer, opvragen posities etc.
dan kun je de basic functies redelijk recht toe recht aan houden en zonder browserchecks.

meen dat je in ns4x in 3 regels een functie kan schrijven die de methode van document.all om objecten op te vragen simuleert, enkel door hem recursief door eventuele layers te laten lopen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
functie getObject(id, d)
{
   if (!d) d=document
   if (d.getElementById) o=d.getElementById(id)
   else if (d.all) o=d.all[id]
   else if (d[id]) o=d[id]
   else {
    l=d.layers
    for (var i=0;l&&d.layers[i];i++) 
       o=gObj(id, l.document)          
   }
   return o
}

hiermee kun je bijna altijd alle objecten makkelijk benaderen, enkel opletten dat netscape4x op sommige elementen enkel names toestaat en geen id's (images)

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Dank je, ik zal er morgenvroeg eens mee aan het prutsen gaan...

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Hmm, ik merkte zonet dat het helemaal niet aan die innerWidth lag, daar komt in NS namelijk gewoon de juiste waarde uit, maar volgens mij gaat het hier mis:
code:
1
2
3
4
if (ns4) document.layers[id].visibility = "show"
else if (ie4) document.all[id].style.visibility = "visible"
if (ns4) document.layers[id].left = plaats
else if (ie4) document.all[id].style.left = plaats

Ik heb in ieder geval dit in m'n NS stylesheet staan voor al de 4 menuutjes:
code:
1
2
3
4
#menu1 {position:absolute;top:138;left:112;z-index:200;width:110;visibility:hidden;}
#menu2 {position:absolute;top:138;left:238;z-index:200;width:110;visibility:hidden;}
#menu3 {position:absolute;top:138;left:362;z-index:200;width:110;visibility:hidden;}
#menu4 {position:absolute;top:138;left:493;z-index:200;width:110;visibility:hidden;}

En ik roep een menu (onMouseOver) op deze manier aan:
onmouseover="show('menu1','401');"

Hij berekent dan in het begin van m'n show functie (zie hierboven) het midden van de pagina, en trekt daar die 401 vanaf (zover vanaf het midden moet menu1 staan), en hij moet hem dan weergeven, maar dat weergeven gaat dus mis met netscape, er gebeurt geen $#$^*@...

Verwijderd

code:
1
onmouseover="show('menu1',401);"

Zonder '' om de 401 dus...

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Op woensdag 07 november 2001 16:15 schreef Blues het volgende:
code:
1
onmouseover="show('menu1',401);"

Zonder '' om de 401 dus...
Hmm, maakt dat in IE niet uit dan?
Daar werkt het namelijk wel gewoon.....

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Op woensdag 07 november 2001 16:15 schreef Blues het volgende:
code:
1
onmouseover="show('menu1',401);"

Zonder '' om de 401 dus...
Getest en wel heeft het geen positief resultaat opgeleverd :)

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 20:06

RM-rf

1 2 3 4 5 7 6 8 9

code:
1
2
3
4
5
6
7
8
9
function show(id,vanbr) {
  thisElement = (ie4)?document.all[id]:document.layers[id]
  top = (ie4)?thisElement.posTop:thisElement.top
  left=(ie4)?document.body.offsetWidth-4:window.innerWidth;
  left = left/2-vanbr;
  if (ns4) document.layers[id].visibility = "show"
  else if (ie4) document.all[id].style.visibility = "visible"
  thisElement.moveTo(left, top)
}

vanbr is dus 401, wat je kuntdoen is exact na left = left/2-vanbr een alert(left) te doen, dat zou dan nog een integer moeten zijn, en eigenlijk liefst niet negatief (lijkt ns4x nog wel eens probs me te hebben)

als het misgaat heeft het zin om even een alert te zetten op elke step, simpel om te checken waar het exact misgaat, verder, misschien gaat het wel mis omdat ik in mn 'ohne controlierung' intikken van de code vergist heb in de volgore van de modeTo-argumenten, misschien moet het wel moveTo(top, left) zijn
Hmm, maakt dat in IE niet uit dan?
Daar werkt het namelijk wel gewoon.....
"we're webdesigners, we don't care about what ie thinks; because ie has proven itself to be a lousy whore that sleeps with every variable that's willing to put the right amount of cash on the counter:."

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Het vage is dat hij in het volgende stukje gewoon NS zou moeten herkennen, maar dat doet hij niet:
code:
1
2
3
4
5
6
ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false
function show(id) {
if (ns4) document.layers[id].visibility = "show"
else if (ie4) document.all[id].style.visibility = "visible"
}

want als ik het volgende doe (let op m'n if (ns4) regel):
code:
1
2
3
4
5
6
ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false
function show(id) {
if (ns4) document.write("boe");
else if (ie4) document.all[id].style.visibility = "visible"
}

dan gebeurt er nog steeds niks.
Als ik dat bij m'n else if (ie4) neer zet dan werkt het wel, (in internet explorer dan).

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 21:23
Check eens www.brainjar.com
Pagina: 1