Wie bestimme ich mit jQuery die Größe des Browser-Ansichtsfensters und erkenne dies erneut, wenn die Größe der Seite geändert wird? Ich muss eine IFRAME-Größe in diesen Bereich einfügen (an jedem Rand ein wenig).
Für diejenigen, die es nicht wissen, hat das Browser-Ansichtsfenster nicht die Größe des Dokuments / der Seite. Dies ist die sichtbare Größe Ihres Fensters vor dem Bildlauf.
Antworten:
So ermitteln Sie die Breite und Höhe des Ansichtsfensters:
Größenänderung des Ereignisses der Seite:
quelle
innerWidth
/innerHeight
korrekter zu verwenden (Zoom abdecken).DOCTYPE
Deklaration enthält, z<!DOCTYPE html>
.Sie können Ansichtsfenstereinheiten (CSS3) ausprobieren :
Browser-Unterstützung
quelle
1. Antwort auf die Hauptfrage
Das Skript
$(window).height()
funktioniert gut (zeigt die Höhe des Ansichtsfensters und nicht das Dokument mit Bildlaufhöhe an), ABER es erfordert, dass Sie das Doctype-Tag korrekt in Ihr Dokument einfügen, zum Beispiel diese Doctypes:Für HTML 5:
<!DOCTYPE html>
Für Übergangs-HTML4:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Wahrscheinlich ist der von einigen Browsern angenommene Standard-Doctype ein solcher,
$(window).height()
der die Höhe des Dokuments und nicht die Höhe des Browsers verwendet. Mit der Doctype-Spezifikation ist sie zufriedenstellend gelöst, und ich bin mir ziemlich sicher, dass Sie Peps vermeiden werden, den "Scroll-Overflow in versteckt und dann zurück zu ändern", was leider ein etwas schmutziger Trick ist, besonders wenn Sie es nicht tun. t Dokumentieren Sie es im Code für die zukünftige Verwendung durch den Programmierer.2. Ein ZUSÄTZLICHER Tipp, beachten Sie Folgendes: Wenn Sie ein Skript erstellen, können Sie außerdem Tests erfinden, die Programmierern bei der Verwendung Ihrer Bibliotheken helfen. Lassen Sie mich ein paar erfinden:
$ (Dokument) .ready (Funktion () {});BEARBEITEN: über Teil 2, "Ein ZUSÄTZLICHER Tipp, Anmerkung beiseite": @Machiel, im gestrigen Kommentar (04.09.2014), war UTTERLY richtig: Der Scheck des $ kann nicht im fertigen Ereignis von Jquery sein, weil Wir gehen, wie er betonte, davon aus, dass $ bereits definiert ist. DANKE FÜR DAS AUSZEICHNEN, und bitte korrigieren Sie den Rest Ihrer Leser, wenn Sie es in Ihren Skripten verwendet haben. Mein Vorschlag ist: Fügen Sie in Ihre Bibliotheken eine "install_script ()" - Funktion ein, die die Bibliothek initialisiert (setzen Sie einen Verweis auf $ in eine solche init-Funktion, einschließlich der Deklaration von ready ()) und zu Beginn einer solchen "install_script ()" - Funktion Überprüfen Sie, ob das $ definiert ist, machen Sie jedoch alles unabhängig von JQuery, damit Ihre Bibliothek "sich selbst diagnostizieren" kann, wenn JQuery noch nicht definiert ist. Ich bevorzuge diese Methode, anstatt die automatische Erstellung einer JQuery zu erzwingen, die sie von einem CDN bringt. Das sind winzige Notizen, um anderen Programmierern zu helfen. Ich denke, dass Leute, die Bibliotheken erstellen, mehr Feedback zu Fehlern potenzieller Programmierer erhalten müssen. Zum Beispiel benötigt Google Apis ein Handbuch, um die Fehlermeldungen zu verstehen. Es ist absurd, externe Dokumentation für einige kleine Fehler zu benötigen, bei denen Sie nicht nach einem Handbuch oder einer Spezifikation suchen müssen. Die Bibliothek muss SELBSTDOKUMENTIERT sein. Ich schreibe Code, der sich sogar um die Fehler kümmert, die ich in sechs Monaten begehen könnte, und es versucht immer noch, ein sauberer und sich nicht wiederholender Code zu sein, der bereits geschrieben wurde, um zukünftige Entwicklerfehler zu verhindern. Ich denke, dass Leute, die Bibliotheken erstellen, mehr Feedback zu Fehlern potenzieller Programmierer erhalten müssen. Zum Beispiel benötigt Google Apis ein Handbuch, um die Fehlermeldungen zu verstehen. Es ist absurd, externe Dokumentation für einige kleine Fehler zu benötigen, bei denen Sie nicht nach einem Handbuch oder einer Spezifikation suchen müssen. Die Bibliothek muss SELBSTDOKUMENTIERT sein. Ich schreibe Code, der sich sogar um die Fehler kümmert, die ich in sechs Monaten begehen könnte, und es versucht immer noch, ein sauberer und sich nicht wiederholender Code zu sein, der bereits geschrieben wurde, um zukünftige Entwicklerfehler zu verhindern. Ich denke, dass Leute, die Bibliotheken erstellen, mehr Feedback zu Fehlern potenzieller Programmierer erhalten müssen. Zum Beispiel benötigt Google Apis ein Handbuch, um die Fehlermeldungen zu verstehen. Es ist absurd, externe Dokumentation für einige kleine Fehler zu benötigen, bei denen Sie nicht nach einem Handbuch oder einer Spezifikation suchen müssen. Die Bibliothek muss SELBSTDOKUMENTIERT sein. Ich schreibe Code, der sich sogar um die Fehler kümmert, die ich in sechs Monaten begehen könnte, und es versucht immer noch, ein sauberer und sich nicht wiederholender Code zu sein, der bereits geschrieben wurde, um zukünftige Entwicklerfehler zu verhindern. Sie müssen nicht nach einem Handbuch oder einer Spezifikation suchen. Die Bibliothek muss SELBSTDOKUMENTIERT sein. Ich schreibe Code, der sich sogar um die Fehler kümmert, die ich in sechs Monaten begehen könnte, und es versucht immer noch, ein sauberer und sich nicht wiederholender Code zu sein, der bereits geschrieben wurde, um zukünftige Entwicklerfehler zu verhindern. Sie müssen nicht nach einem Handbuch oder einer Spezifikation suchen. Die Bibliothek muss SELBSTDOKUMENTIERT sein. Ich schreibe Code, der sich sogar um die Fehler kümmert, die ich in sechs Monaten begehen könnte, und es versucht immer noch, ein sauberer und sich nicht wiederholender Code zu sein, der bereits geschrieben wurde, um zukünftige Entwicklerfehler zu verhindern.
quelle
$
nachdem Sie den$
Anruf bereits verwendet haben$(document).ready(function() { } );
. Es ist gut, wenn Sie überprüfen, ob jQuery verfügbar ist, aber zu diesem Zeitpunkt ist es bereits zu spät.Mit $ (window) .resize () können Sie feststellen, ob die Größe des Ansichtsfensters geändert wurde.
jQuery hat keine Funktion, um die korrekte Breite und Höhe des Ansichtsfensters [1] konsistent zu erkennen, wenn eine Bildlaufleiste vorhanden ist.
Ich habe eine Lösung gefunden, die die Modernizr-Bibliothek und speziell die mq-Funktion verwendet, mit der Medienabfragen für Javascript geöffnet werden.
Hier ist meine Lösung:
Meine Antwort wird wahrscheinlich nicht dazu beitragen, die Größe eines Iframes auf 100% der Breite des Ansichtsfensters mit einem Rand auf jeder Seite zu ändern, aber ich hoffe, dass dies Webentwicklern Trost bietet, die von der Browser-Inkohärenz der Berechnung der Breite und Höhe des Javascript-Ansichtsfensters enttäuscht sind.
Vielleicht könnte dies in Bezug auf den Iframe helfen:
[1] Sie können $ (Fenster) .width () und $ (Fenster) .height () verwenden, um eine Zahl zu erhalten, die in einigen Browsern korrekt, in anderen jedoch falsch ist. In diesen Browsern können Sie versuchen, window.innerWidth und window.innerHeight zu verwenden, um die richtige Breite und Höhe zu erhalten, aber ich würde von dieser Methode abraten, da sie auf dem Schnüffeln von Benutzeragenten beruht.
Normalerweise sind sich die verschiedenen Browser nicht einig, ob sie die Bildlaufleiste als Teil der Fensterbreite und -höhe enthalten oder nicht.
Hinweis: Sowohl $ (window) .width () als auch window.innerWidth variieren zwischen Betriebssystemen, die denselben Browser verwenden. Siehe: https://github.com/eddiemachado/bones/issues/468#issuecomment-23626238
quelle
quelle
So ermitteln Sie die Größe des Ansichtsfensters beim Laden und beim Ändern der Größe (basierend auf der SimaWB-Antwort):
quelle
Bitte beachten Sie, dass CSS3-Ansichtsfenstereinheiten (vh, vw) unter iOS nicht gut funktionieren. Wenn Sie durch die Seite scrollen, wird die Ansichtsfenstergröße irgendwie neu berechnet und Ihre Größe des Elements, das Ansichtsfenstereinheiten verwendet, nimmt ebenfalls zu. Eigentlich ist also etwas Javascript erforderlich.
quelle