Avatar billede lklingenberg Nybegynder
20. januar 2004 - 00:26 Der er 11 kommentarer og
1 løsning

Beregning af sidens højde - browserkompabilitet

Hi E,

Jeg har med hjælp fra andre på E forsøgt at lade et script beregne højden af mit dokument i browseren og anvende det til at udfylde en menubjælke. Dvs. at højden på min menu-div først beregnes i det øjeblik brugeren henter siden ind i sin browser.

Problemet er, at det ikke virker i Mozilla Firebird - og det går jo ikke!

Er der nogen der kan hjælpe. Scriptet er kopieret herunder og et eksempelt kan ses på: http://lknet.dk/test/12/

---

function getHeight() {
    var b1 = (window.innerHeight)?true:false; if (!b1) {
    var b2 = (document.body.offsetHeight==document.body.scrollHeight)?true:false;
    var b3 = (document.documentElement&&document.documentElement.clientHeight)?true:false; }
    var scrollHeight = (b1)?window.innerHeight:(b2&&b3)?document.documentElement.scrollHeight:document.body.scrollHeight;
    var trueHeight = (scrollHeight<document.documentElement.clientHeight)?document.documentElement.clientHeight:scrollHeight
    return trueHeight;
  }
 
  onload = function() {
    document.getElementById("menu").style.height = getHeight()+"px";
  }
  onresize = window.onload;
Avatar billede grunken Nybegynder
20. januar 2004 - 00:36 #1
et hurtigt gæt :-)

function placer(){
  document.getElementById("menu").style.height = getHeight()+"px";
}

<body onload="placer();" onresize="placer();">

onload = jada jada
er ie kode :-)
Avatar billede roenving Novice
20. januar 2004 - 00:45 #2
Har du forsøgt at sætte en højde på html og body-elementet (udover det, som grunken nævner !-)

<style type="text/css">
html,body{height:100%;}
</style>
Avatar billede lklingenberg Nybegynder
20. januar 2004 - 01:12 #3
Hm, det hjalp ikke meget... Det virker stadig kun i IE og ikke i Mozilla (eller for den sags skyld Opera og k-Meleon, men det gjorde det helle ikke før).
Avatar billede lklingenberg Nybegynder
20. januar 2004 - 15:04 #4
Anyone...?
Avatar billede lklingenberg Nybegynder
22. januar 2004 - 14:19 #5
Ok, jeg er nødt til at spørge: er I på bar bund (fair nok), har I ikke tid (fair nok) eller gider I bare ikke (fair nok)? Anyway, det ville være rart med en udmelding, så jeg enten kan lukke spørgsmpålet eller håbe på mere hjælp...
Avatar billede grunken Nybegynder
22. januar 2004 - 14:32 #6
På bar bund er man vel aldrig :-D, jeg vil gerne kigge på det senere (iaften), hvis ingen andre har meldt sig....

Og lige p.t. har jeg desværre problemer med mails fra eksperten, så derfor har jeg ikke fået fulgt med :-)
Avatar billede roenving Novice
22. januar 2004 - 14:37 #7
-- måske er det din brug af onload, som de kløjs i ?-)

-- lavede lige noget test, og den virkede helt fint i Mozilla, mens den ikke virkede i IE !-)
Avatar billede roenving Novice
22. januar 2004 - 14:44 #8
Og sådan virkede det vist nogenlunde:

<html>
<head>
<style type="text/css">
html,body{height:100%;padding:0px;margin:0px;}
#menu{background:lightblue;}
</style>
<script type="text/javascript">
function getHeight() {
    var b1 = (window.innerHeight)?true:false;
    if (!b1) {
    var b2 = (document.body.offsetHeight==document.body.scrollHeight)?true:false;
    var b3 = (document.documentElement&&document.documentElement.clientHeight)?true:false;
    }
    var scrollHeight = (b1)?window.innerHeight:(b2&&b3)?document.documentElement.scrollHeight:document.body.offsetHeight;
    var trueHeight = (scrollHeight<document.documentElement.clientHeight)?document.documentElement.clientHeight:scrollHeight
    return trueHeight;
  }
 
  window.onload = function() {
    alert(getHeight());
    document.getElementById("menu").style.height = getHeight()+"px";
  }
  window.onresize = window.onload;
 
</script>
</head>
<body>
<div id="menu">
Menudiv
</div>
</body>
</html>
Avatar billede lklingenberg Nybegynder
22. januar 2004 - 18:20 #9
Så vidt jeg lige har kunnet testet er der stadig et problem  i Firebird (se ovenstående link, hvor jeg har sat roenvings script ind).
Avatar billede lklingenberg Nybegynder
22. januar 2004 - 21:25 #10
De forskellige muligheder for at udregne dokumentets fysiske længde opfattes tilsyneladende meget forskelligt i de to browsere jeg lige har bruget (IE6 og Firebird). De en lille test her: http://lknet.dk/test/12/index2.htm.
I alle tilfældende ser det ud til at firebird _kun_ tager vinduets størrelse og altså ikke dokumentets fysiske længde.
Avatar billede lklingenberg Nybegynder
22. januar 2004 - 22:22 #11
aha - nu sker der noget.

Fandt denne artikel:
http://www.evolt.org/article/document_body_doctype_switching_and_more/17/30655/index.html

...og legede lidt:
http://lknet.dk/test/12/

Sp enten kan man teste for browser og anvende body eller documentElemet eller også kan man simpelthen teste for den højeste værdi og så anvende den. Det ser dog ud til at Opera stadig har lidt problemer. øv!
Avatar billede lklingenberg Nybegynder
23. januar 2004 - 02:31 #12
Så det her lille script kan faktisk 'do the trick' med Mozilla, Firebird, EI, NS, K-Meleon og Avant. MEN Opera vil ikke godtage dette og finder kun højden af browservinduet. Kan nogle af jer greje den? Ellers lukker jeg selv spm.

<script type="text/javascript">
window.onload = function() {
  var b1 = document.documentElement.offsetHeight
  var b2 = document.body.offsetHeight
  var trueHeight = (b1>b2)?b1:b2
  document.getElementById("menu").style.height = trueHeight+"px";
}
window.onresize = window.onload;
</script>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester