größe des Fensters berechnen
henry
- javascript
0 Der Martin0 MudGuard0 Gunnar Bittersmann0 JürgenB
Hallo,
eine banale Frage...
Kann ich von javascript im eigenen Fenster die benötigte Größe berechnen.
d.h.
Ich habe mehrere input in einem Fenster erzeugt. Nun möchte ich das Fenster auf die "ideale" Größe verändern. Ist so etwas überhaupt möglich.
der henry
Hi,
Ich habe mehrere input in einem Fenster erzeugt. Nun möchte ich das Fenster auf die "ideale" Größe verändern. Ist so etwas überhaupt möglich.
ja und nein.
Natürlich kannst du Höhe und Breite des body-Elements auslesen und mit Höhe und Breite des html-Elements vergleichen. Dann weißt du, um wieviel du das Fenster mindestens vergrößern musst bzw. höchstens verkleinern darfst, so dass noch alles ohne Scrollen erreichbar ist.
Da stößt du aber sehr schnell auf Grenzen. Zum Beispiel ist es sehr ärgerlich, wenn ein Programm (hier: Browser durch Javascript veranlasst) sein Fenster plötzlich größer macht als meinen Desktop - dann ragen nämlich Teile des Fensters über den Bildschirm hinaus und sind doch wieder nicht mehr erreichbar. Andererseits ist angesichts der heutigen Browser, die überwiegend das Tab-Konzept verwenden, das Vergrößern oder Verkleinern *eines* Fensters sowieso nicht mehr möglich, und selbst wenn, dann dürften viele Nutzer ihrem Browser "verboten" haben.
Daher nur der gutgemeinte Rat: Lass es bleiben.
So long,
Martin
Hallo,
Natürlich kannst du Höhe und Breite des body-Elements auslesen und mit Höhe und Breite des html-Elements vergleichen. Dann weißt du, um wieviel du das Fenster mindestens vergrößern musst bzw. höchstens verkleinern darfst, so dass noch alles ohne Scrollen erreichbar ist.
Das verstehe ich nicht wie du das meinst. "Höhe und Breite des body-Elements auslesen"
Bitte einen kurzes Beispiel oder Link.... vielleicht sitze ich auch nur auf der Leitung.
Wegen dem automatischen ändern.
Ich erzeuge dynamische "Meldefenster" die mit <input radio> Auswahl quittiert werden müssen.
Die Anzahl der <input radio> ist ebenfalls verschieden, daher will nach dem erstellen mit einem cgi-script das Fenster einmalig anpassen (onload). Die Fenster sind werden nie größer als ca.200x300px. Daher sehe ich keine Gefahr.
Gruß
henry
Hallo henry,
Das verstehe ich nicht wie du das meinst. "Höhe und Breite des body-Elements auslesen"
Bitte einen kurzes Beispiel oder Link.... vielleicht sitze ich auch nur auf der Leitung.
hast du meine Vorschläge ausprobiert?
Gruß, Jürgen
Hi,
eine banale Frage...
Kann ich von javascript im eigenen Fenster die benötigte Größe berechnen.
müßte mit sowas wie scrollSize (oder scrollWidth + scrollHeight?) gehen, für den body oder das html-Element.
Achtung, das ist die Netto-Größe.
Bei einem Fenster mußt Du aber die Brutto-Größe angeben, also inkl. Titelleiste, Adreßleiste, Statusleiste usw.
ggf. also mehrfach vergrößern, bis die tatsächliche Größe des html- bzw. body-Elementes mit der scrollSize zusammenpaßt.
Ob der einzelne User das zuläßt, daß die Fenstergröße geändert werden darf, ist nochmal ein anderes Thema ...
cu,
Andreas
@@henry:
nuqneH
Ich habe mehrere input in einem Fenster erzeugt. Nun möchte ich das Fenster auf die "ideale" Größe verändern. Ist so etwas überhaupt möglich.
Ja.
Qapla'
PS: Falls du weitere Informationen haben möchtest, solltest du dir überlegen, was man zur Beantwortung deine Fags noch für Informationen von dir bräuchte.
Hallo henry,
ich weiß zwar auch nicht, was du jetzt vor hast, aber für deine Teilprobleme habe ich in meiner Wühlkiste folgendes gefunden:
Größe des Browserfensters:
var getWinsize = function(){
var r = { width:0, height:0 };
if (document.documentElement && document.documentElement.clientWidth) r.width = document.body.clientWidth;
else if (window.innerWidth) r.width = window.innerWidth;
if (document.documentElement && document.documentElement.clientHeight) r.height = document.documentElement.clientHeight;
else if (window.innerHeight) r.height = window.innerHeight;
return r;
}
Größe (und Position) eines beliebigen Blockelements:
var getRect = function (o){
var r = { top:0, left:0, width:0, height:0 };
if(!o) return r;
else if(typeof o == 'string' ) o = document.getElementById(o);
if( typeof o != 'object' ) return r;
if(typeof o.offsetTop != 'undefined') {
r.height = o.offsetHeight;
r.width = o.offsetWidth;
r.left = r.top = 0;
while (o && o.tagName != 'BODY') {
r.top += parseInt( o.offsetTop );
r.left += parseInt( o.offsetLeft );
o = o.offsetParent;
}
}
return r;
}
Gruß, Jürgen
Hallo
Größe (und Position) eines beliebigen Blockelements:
var getRect = function (o){
var r = { top:0, left:0, width:0, height:0 };
if(!o) return r;
else if(typeof o == 'string' ) o = document.getElementById(o);
if( typeof o != 'object' ) return r;
if(typeof o.offsetTop != 'undefined') {
r.height = o.offsetHeight;
r.width = o.offsetWidth;
r.left = r.top = 0;
while (o && o.tagName != 'BODY') {
r.top += parseInt( o.offsetTop );
r.left += parseInt( o.offsetLeft );
o = o.offsetParent;
}
}
return r;
}
Ich benutze nun diese Funktion (body) und rechne ein paar pixel für Kopf dazu... funktioniert Prima.
Als Übergabe funktioniert jedoch kein String ("body") sondern nur eine Objekt-Referenz unter Firefox 26.0. Das ist Schade da ich dem body immer eine "id" oder "name" geben muss.
var objRef = document.getElementById("bodyid");
Vielleicht geht es einfacher/dynamischer ohne den <body> speziell zu verändern.
Danke
henry
Hallo henry,
warum benutzt du nicht getWinsize? Das misst das Browserfenster aus, also den Viewport.
Den body kannst du mit document.body ansprechen. Probier mal
gw = getWinsize();
gr = getRect(document.body);
alert(gw.width+" "+gw.height+" "+gr.width+" "+gr.height);
Gruß, Jürgen