Hintergrund: Ich arbeite derzeit an einem Projekt, in dem meine JS-App in mehrere andere (übergeordnete) JS-Anwendungen eingebettet ist. Einige Eltern-Apps können meine App anzeigen/verbergen, indem sie display: block/none auf ein Element setzen, das meine App enthält. Andere übergeordnete Apps entfernen vorübergehend meine App aus dem DOM und verbinden sie später wieder. Wenige Eltern-Apps verwenden Shadow-DOM, daher habe ich keinen Zugriff auf die Elemente in der Eltern-App.getBoundingClientRect zum Erkennen der Sichtbarkeit
Ich brauche eine Möglichkeit, um zu überprüfen, ob meine App sichtbar ist (innerhalb DOM und angezeigt; nicht Sichtbarkeit: versteckt und muss nicht im Ansichtsfenster sein), ohne die Eltern-Apps zu ändern, also schaute ich in getBoundingClientRect.
Frage: Zumindest auf Chrom, getBoundingClientRect Returns (w: 0, h: 0, l: 0, t: 0), wenn ein Element oder dessen Vorfahre hat Anzeige: keine oder wenn es entfernt wird, von DOM. Ich konnte keine Dokumentation über die Garantie dieses Verhaltens finden, und ich frage mich, ob es sicher ist (in dem Sinne, dass sich diese Logik nicht ändert), getBoundingClientRect zu verwenden, um nach der Sichtbarkeit eines Elements zu suchen.
Auch ich muss wissen, ob dieses Verhalten in allen gängigen Browsern, einschließlich FF, IE8 + und Safari, konsistent ist. Ist das irgendwo dokumentiert?
Schließlich, warum (0,0,0,0)? Ich fühle mich wie getBoundingClientRect sollte Null in solchen Fällen wie (0,0,0,0) eigentlich etwas anderes bedeutet. Gibt es einen guten Grund dafür?
Edited/zusätzliche Frage: Dank ISTOS für den Hinweis auf, dass null Rückkehr einige ahnungslosen Code brechen kann, wie zum Beispiel:
console.log(clientRectObject.height);
// TypeError: Cannot read property 'height' of null
nicht über das aktuelle Verhalten zu beschweren, sondern als Designfrage: Anstelle von null kann die Rückgabe einiger ungültiger Rect-Werte (z. B. negative Breite und Höhe) eine sinnvollere Alternative sein?
Vielen Dank für die Links und zusätzliche Erklärungen! – haejeong87
In Bezug auf IE8 - _ "Breite und Höhe fehlen in IE8, also berechnen Sie sie manuell" _: https://github.com/twbs/bootstrap/commit/eaf21ec21d260ff7ed1e5b54e5185de235ff7034 – istos