Avatar billede kio_liex Nybegynder
22. januar 2005 - 11:48 Der er 16 kommentarer

Højde på iframe = højde på billede?

Jeg har ikke den store viden i at lave JavaScripts helt fra bunde, så derfor dette spørgsmål...

Jeg skal bruge et script der giver en iframe samme højde som det billede der skal vises i den.
Scriptet må gerne inde holde en variabel til billede-kilden...

Håber I kan hjælpe mig...
Avatar billede keysersoze Guru
22. januar 2005 - 11:53 #1
http://roenving.users.whitehat.dk/ -> #1 Resize til billede
Avatar billede kio_liex Nybegynder
22. januar 2005 - 12:56 #2
Det er ikke lige sådan det skal være, det skal jo ikke være et pop-up vindue...
men jeg kigger da lige på det...

Til jer andre kom gerne med andre løsninger...
Avatar billede tknudsen Nybegynder
23. januar 2005 - 12:06 #3
Jeg har lavet noget lignende til IE. Pseudo koden er:
1) Start load af billede i iframe
2) Vent på billedet er loadet
3) Find højde på indhold af iframe
4) Sæt ny størrelse på iframe

Eks:

<script>

  function loadImage(url)
  {
    document.frames['iframe1'].document.getElementById('img1').src = url;
    document.getElementById('iframe1').onreadystatechange = onReadyStateChange;
  }

  function onReadyStateChange()
  {
    if(event.srcElement.readystate=='complete')
      resizeContainer();
  }

  function resizeContainer()
  {
    var iframe = document.getElementById('iframe1');
    var image = document.frames['iframe1'].document.getElementById('img1');
    iframe.style.height = image.height;
    iframe.style.width = image.width;
  }
</script>
<body>
  <iframe id="iframe1" src="file_with_imagetag.html"></iframe>
</body>

Filen, der loades i iframen, skal have et <img> tag med id "img1". Jeg er ikke sikker på at højde og vidde kan hentes fra img1 via .height og .width, hvis ikke kan .style.clientHeight og .style.clientWidth bruges.
Avatar billede tknudsen Nybegynder
23. januar 2005 - 12:07 #4
loadImage kan feks. kaldes i body.onload:

<body onload="loadImage('image/picture1.jpg')">...
Avatar billede kio_liex Nybegynder
24. januar 2005 - 23:19 #5
Jeg kan ikke får det til at virke...

kan man ikke lave noget i stil med dette:


<iframe src="11648_01.jpg" width="document.getElementById('11648_01.jpg').style.height">
Avatar billede tknudsen Nybegynder
25. januar 2005 - 08:58 #6
Der kan opstå et timings problem, da det ikke er sikkert at billedet er loadet, når højden på iframen skal sættes.
Avatar billede tknudsen Nybegynder
25. januar 2005 - 09:00 #7
prøv evt at udskrive event.srcElement.readyState i onReadyStateChange metoden:

  function onReadyStateChange()
  {
    alert(event.srcElement.readystate);
    if(event.srcElement.readystate=='complete')
      resizeContainer();
  }

så kan du se om funktionen overhovedet bliver kaldt, og hvad det kaldende elements readyState er.
Avatar billede kio_liex Nybegynder
25. januar 2005 - 10:08 #8
Gør jeg noget forkert, der sker ikke noget...
Jeg har to filer, den ene hedder test.html, og ser således ud:
--------------------------------------
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title> new document </title>

</head>

<body>
<iframe id="iframe11" src ="billede.html"></iframe>
</body>
</html>
--------------------------------------
den anden hedder billede.html, og ser således ud:
--------------------------------------
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title> new document </title>

    <script language="javascript">
        function loadimage(url)
          {
            document.frames['iframe11'].document.getelementbyid('img11').src = url;
            document.getelementbyid('iframe11').onreadystatechange = onreadystatechange;
          }

          function onreadystatechange()
          {
            alert(event.srcelement.readystate);
            if(event.srcelement.readystate=='complete')
              resizecontainer();
          }

          function resizecontainer()
          {
            var iframe = document.getelementbyid('iframe11');
            var image = document.frames['iframe11'].document.getelementbyid('img11');
            iframe.style.height = image.style.clientheight;
            iframe.style.width = image.width;
          } 
    </script>

</head>

<body onload="loadimage('http://www.overclocking.dk/img/users/11648_01.jpg')">
<img src ="http://www.overclocking.dk/img/users/11648_01.jpg" id="img11" />
</body>
</html>
--------------------------------------
er det rigtigt?
Avatar billede tknudsen Nybegynder
25. januar 2005 - 10:24 #9
Billedet skal ligge i billede.html filen, og behøves ikke at være udfyldt, da body.onload klarer det.
Avatar billede kio_liex Nybegynder
25. januar 2005 - 10:48 #10
Det forstår jeg ikke helt...

Kan det entlig laves?
Avatar billede roenving Novice
26. januar 2005 - 01:31 #11
<img src="noget.jpg" onload="parent.document.getElementById('IFRAMEID').style.height =this.scrollHeight + 'px';">
Avatar billede roenving Novice
26. januar 2005 - 01:31 #12
-- og så skal iframen selvfølgelig have et id:

<iframe id="IFRAMEID" ...></iframe>
Avatar billede tknudsen Nybegynder
26. januar 2005 - 08:39 #13
roenvig >> hvis billedet er loadet før parent.document opstår der en fejl.
Avatar billede kio_liex Nybegynder
26. januar 2005 - 11:09 #14
Men det virker, men jeg prøver at lege lidt med det.

Kom gerne med en ide til hvordan det kan gøres bedre...

Det er lidt undeligt at functioner ikke rgitigt virker...
Avatar billede roenving Novice
26. januar 2005 - 23:16 #15
Man kan også flytte onload-funktionen ind på body-tagget eller placere det som noget javascript på siden, men jeg forstår ikke problematikken, med at der er fejl, hvis parent-dokumentet ikke er loadet, for det er vel bare iframe-elementet, som skal være initialiseret (jeg har i årevis brugt den samme type kode til resize af iframes !-)
Avatar billede tknudsen Nybegynder
27. januar 2005 - 08:29 #16
roenvig >> det kan der være noget om. Beklager.
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