Avatar billede alvion Nybegynder
15. april 2004 - 14:27 Der er 10 kommentarer og
1 løsning

Finde vinduets left/top koordinater + width/height

Jeg forsøger at lave et popup-vindue, der placerer sig i nederste venstre hjørne i forhold til det vindue, som oprettede popup-vinduet.

Følgende er lidt pseudokode, da nogle af attributterne ikke findes, men jeg forestiller mig at dette skal ske i onload event'en på popup vinduet:
---------------------------------------
popupHeight = window.height;

popupLeft = opener.left;
popupTop = opener.top + opener.height - popupHeight;

window.moveTo(popupLeft, popupTop);
---------------------------------------
Mit problem ligger her i at finde de 4 koordinater: left, top, width, height for vinduerne. Efter at have bladret rundt i diverse javascript-referencer, kan jeg ikke komme på nogen løsning.

Men måske er der én herinde, som lige ved, hvad der skal til?
Avatar billede Slettet bruger
15. april 2004 - 14:34 #1
Jeg anvender følgende til at maximere vinduet:

<script language="javascript">
<!--

top.window.moveTo(0,0);

if (document.all) {
    top.window.resizeTo(screen.availWidth,screen.availHeight);
}
else if (document.layers||document.getElementById) {
    if (top.window.outerHeight<screen.availHeight||top.window.outerWidth<screen.availWidth){
        top.window.outerHeight = screen.availHeight;
        top.window.outerWidth = screen.availWidth;
    }
}
</script>
Avatar billede Slettet bruger
15. april 2004 - 14:35 #2
ergo må
nederste højre hjørne være (screen.availWidth,screen.availWidth)
Avatar billede Slettet bruger
15. april 2004 - 14:36 #3
og dit vindue start-position må så være (screen.availWidth-top.window.outerHeight,screen.availWidth-top.window.outerWidth)
Avatar billede Slettet bruger
15. april 2004 - 14:37 #4
- og dem fik jeg så lige byttet rundt:
(screen.availWidth-top.window.outerWidth, screen.availHeight-top.window.outerHeight)
Avatar billede Slettet bruger
15. april 2004 - 14:42 #5
Og måske er det bare dumt at rode med, når andre folk har skrevet samme kode tidligere:
http://developer.irt.org/script/433.htm
Avatar billede alvion Nybegynder
15. april 2004 - 14:48 #6
1) Jeg skal ikke have nogen vinduer maksimeret
2) Nederste VENSTRE hjørne er (0, screen.availHeight). Men det skal jeg ikke bruge - jeg skal bruge følgende:

  +---------------------------------------+
  | Mit hovedvindue                      |
  |                                      |
  |                                      |
  |                                      |
1+------------------+                    |
  | Mit popup vindue |                    |
  |                  |                    |
  |                  |                    |
  |                  |                    |
  +------------------+--------------------+

Det er koordinaterne på hjørnet markeret med "1", som jeg skal bruge.
Avatar billede alvion Nybegynder
15. april 2004 - 14:53 #7
Hov det kom ikke til at se så pænt ud, men prøv at copy/paste det ind i en tekst-editor...

rubbersoul -> Dine eksempler virker desværre ikke fordi:

1) window.outerWidth og window.outerHeight er "undefined"
2) Vinduet skal IKKE placeres i forhold til skærmens hjørner, men i forhold til det ÅBNENDE vindues hjørner.
Avatar billede Slettet bruger
15. april 2004 - 15:21 #8
Arh, ok - det havde jeg misforstået - beklager!
Men kan du ikke gøre det fra hovedsiden når du popper pop-up'en op - på det tidspunkt kender du jo alle variable...
Avatar billede Slettet bruger
15. april 2004 - 15:26 #9
Avatar billede limemedia Nybegynder
15. april 2004 - 15:40 #10
Løst testet i IE6 og Firefox på WinXP

<script language="JavaScript" type="text/javascript">
<!--
    var agent = navigator.userAgent.toLowerCase();
    var isIE = ((agent.indexOf("msie") != -1) && (agent.indexOf("opera") == -1) && (agent.indexOf("webtv") == -1));
    var isGecko = (agent.indexOf("gecko") != -1 && agent.indexOf("safari") == -1);

    var popupHeight = 300;
    var popupWidth = 200;
   
    if (isIE) {
        var posLeft = window.screenLeft;
        var posTop = (window.screenTop+document.body.clientHeight)-(popupHeight+2);
    } else {
        var posLeft = window.window.screenX;
        var posTop = (window.screenY+window.outerHeight)-(popupHeight+32);
    }
   
    pop = window.open('pling.html', 'popWin', 'width='+popupWidth+',height='+popupHeight+',left='+posLeft+',top='+posTop+',scrollbars=1,resizable');
    pop.focus();
//-->
</script>
Avatar billede alvion Nybegynder
16. april 2004 - 10:47 #11
Grr... jeg kan ikke få det til at virke..... Men det er måske også for jeg "vender det lidt på hovedet".

Jeg laver alle beregninger og flytning i popup-vinduet istedet for i hovedvinduet. Og det gør jeg selvfølgelig af en grund: Popup vinduet viser et billede, og skal derefter resizes så det er tilpasset billedets dimensioner. Det har jeg ingen problemer med, det fungerer fint.

Men det betyder så også desværre, at placeringen - eller rettere flytningen - af popup vinduet skal ske i popup-vinduets kode. Dvs. Lars' eksempel bliver til:

<script language="JavaScript" type="text/javascript">
<!--
        .... her sker først noget beregning af vinduets størrelse på baggrund af billedet ...
        window.resize(popupWidth, popupHeight);

       
    var agent = navigator.userAgent.toLowerCase();
    var isIE = ((agent.indexOf("msie") != -1) && (agent.indexOf("opera") == -1) && (agent.indexOf("webtv") == -1));
    var isGecko = (agent.indexOf("gecko") != -1 && agent.indexOf("safari") == -1);

    if (isIE) {
        var posLeft = opener.screenLeft;
        var posTop = (opener.screenTop+opener.document.body.clientHeight)-(popupHeight+2);
    } else {
        var posLeft = opener.screenX;
        var posTop = (opener.screenY+opener.outerHeight)-(popupHeight+32);
    }
   
        window.moveTo(posLeft, posTop);
        window.focus();
//-->

Hvor "window" erstattes af "opener" og "document.body..." bliver til "opener.document.body...".

MEN vinduet placerer sig ikke det rigtige sted. Det er som om, at Explorer (jeg kører IE 6.0) ikke finder de rigtige koordinater for "opener".
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

Seneste spørgsmål Seneste aktivitet
I dag 10:21 Ny printer, men hvilken Af mort1 i Printere
I går 19:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging