Grundsätzlich muss ich wissen, wie viele Pixel die y-Achse von oben links vom Bildschirm ist, bis ich das eigentliche Web-Fenster erreiche. Hat jemand irgendwelche Ideen ...?
Ich weiß nicht, wie Sie die Höhe der externen Komponente zurückgeben können, aber ich nahm das von Ссылка und angepasst, um auch die Höhe der Bildlaufleiste zurückzugeben.
Wenn jemand es in anderen Browsern testen und mir Feedback geben kann, werde ich diese Antwort entsprechend modifizieren.
Leider glaube ich nicht, dass es einen Weg gibt, dies in allen Browsern gleichzeitig zu tun. Chrome, Firefox, Safari und Opera unterstützen window.innerHeight und window.outerHeight , also in diesen Browsern vorausgesetzt, dass Sie den Code nicht innerhalb eines Frames ausführen Es ist ein Fall von:
%Vor% Das lässt (Sie haben es erraten) Internet Explorer, der keine dieser Eigenschaften unterstützt. Es ist nicht einmal in IE9 PP3. Um fair zu IE zu sein, sind sie nicht in der DOM-Spezifikation definiert. Screw the fairness, sie sind in w3c CSSOM Arbeitsentwurf . Es gibt eine "Lösung" 1 , bei der die Größe des Fensters geändert und die Größe wieder geändert wird, aber es verursacht das Flimmern des Fensters und es funktioniert nicht mit einem Fenster mit Registerkarten.
1 (blättern Sie zum zweiten Beispiel)
Dies ist nur das Skript, das ich gefunden habe, das in Webkit-Browsern funktioniert ...:)
%Vor%Minimierte Version:
%Vor%Und Sie müssen es aufrufen, wenn das Dokument fertig ist ... also
%Vor%Getestet 2012-03-28 unter Windows 7 in den neuesten FF, Chrome, IE & amp; Safari und 100% arbeiten.
Quelle: Ссылка
Tags und Links javascript
Obwohl es stark von der Anwendung und den bekannten Einschränkungen abhängt, würde ich die obige Nummer 1 bevorzugen. Der Grund ist, weil es dann explizit ist - es ist immer besser, eine explizite Situation zu haben als eine implizite - wie MIN_VALUE - nach meiner Erfahrung.
Eine andere Option ist ein Wrapper-Objekt, das den Ergebniswert als primitiven int enthält, aber auch einen Statuswert oder etwas Ähnliches hat. So könnte es etwa so aussehen:
%Vor%Sie könnten auch eine Enum anstelle eines Boolean einfügen, um stattdessen einen Zustand zu haben, abhängig von der Komplexität des Problems. Wenn Sie sehen, dass dieses Element zusammengesetzte Informationen enthält - Informationsmengen, die aus einzelnen Schlüsseln oder ähnlichem bestehen - kann ein Containerobjekt oder Statusobjekt in diesen Fällen sehr nützlich sein.
Ich stimme dafür, hier eine geprüfte Ausnahme zu werfen. Im Allgemeinen mag ich keine geprüften Ausnahmen, aber es scheint in diesem Fall vernünftig zu sein. Der Fall, in dem der Wert nicht vorhanden ist, muss getrennt von dem Fall gehandhabt werden, in dem der Wert vorhanden ist. Eine Ausnahme würde dies verdeutlichen.
Eigentlich ist Ihre Idee, eine keyExists-Methode hinzuzufügen, die beste Idee, die Sie auflisten, weil sie nicht darauf angewiesen ist, dass der Benutzer weiß, nach einem bestimmten Wert zu suchen. Wenn Sie diesen Weg gehen, können Sie eine Ausnahme als Backup-Plan auslösen, falls sich der Karteninhalt zwischen dem Aufruf von keyExists und dem Abruf ändert.
Die erste Option ist meiner Meinung nach die sauberste. Magische Zahlen wie -1 und Integer.MIN_VALUE sind irgendwie unordentlich, besonders wenn die Werte nicht intuitiv sind. Das ist eine idiomatische C-Lösung, für die Java-Entwickler Sie hassen werden. Abhängig davon, was Sie tatsächlich verwenden, könnte dies auch eine "KeyNotFoundException" auslösen, wenn dies nur unter "außergewöhnlichen" Umständen geschieht.
float ist unsicher, da nicht alle int-Werte genau als int-Werte dargestellt werden können. long ist eine bessere Option, da alle int-Werte sicher so lange gespeichert werden können und Sie viele weitere Werte für nicht gefunden haben.
Wenn Sie eine Map verwenden, haben Sie sowieso ein Integer-Objekt, also geben Sie das (oder null) zurück
Wenn Sie wirklich Primitive (für Effizienz?) verwenden möchten, schlage ich vor, dass Sie sich TObjectIntHashMap stattdessen. Dies verwendet primitive int-Werte. Um auf Abwesenheit zu prüfen, müssen Sie den Schlüssel containsKey () separat überprüfen.
Ich habe eine Funktion, die einen %code% -Wert für einen bestimmten Schlüssel (von %code% ) zurückgibt. Wenn der Schlüssel nicht existiert, möchte ich etwas zurückgeben, nach dem der Anrufer suchen kann. Es scheint, dass dies am häufigsten eine " gibt -1 zurück, wenn der Schlüssel nicht existiert " Art der Sache. Jedoch kann ich in diesem Fall -1 nicht für diesen Zweck reservieren, da negative Zahlen brauchbare Werte für Schlüssel sind, die tun existieren.
Die einzigen anderen Optionen, auf die ich gekommen bin, sind die folgenden:
Ich schreibe dies in Java, aber Leute mit ähnlichen sprachlichen Hintergründen können gerne Beiträge schreiben. Danke!
Option 5: Eine Ausnahme auslösen
In diesem Fall würde ich jedoch dafür stimmen, die Integer-Klasse zu verwenden.
Zwei Situationen sind typisch:
Wenn Annahme 1 falsch ist, dann wird wahrscheinlich ein Fehler angezeigt. Schützen Sie daher Ihre Annahme in der Zugriffsmethode mit einer Assertion.
Wenn 2 zutrifft, wie würden Sie sicher sein, was zurückgegeben wurde? Also stellen Sie eine Testmethode wie "keyExists" bereit und kennen Sie absolut, bevor Sie auf die Karte zugreifen.
In Fall 1 ist keine Überprüfung erforderlich, was viel sauberer ist, aber der Zugriff scheitert, wenn Sie falsch liegen. Bei speziellen Fällen wie -1 oder Integer.MIN_VALUE ist es sehr schwer sicher zu sein, dass sie nicht verwendet werden.
Sprachen wie Haskell, Scala und C # haben spezielle Typen, um die Anwesenheit / Abwesenheit eines Wertes zu vermitteln, der weit besser ist als der Gebrauch von Null (wenn Sie vergessen haben, werden Sie wahrscheinlich eine NullPointerException erhalten)
- Ändern Sie den Rückgabetyp in die Integer-Wrapper-Klasse und prüfen Sie auf Null.
Dies ist die häufigere Option.
Ich denke, Sie sollten die Optionen # 1 und # 3 kombinieren, da dies mit dem Verhalten der zugrunde liegenden HashMap übereinstimmt. Aus HashMap's Methodendokumentation erhalten :
Gibt den Wert zurück, dem der angegebene Schlüssel in dieser Identitätshashzuordnung zugeordnet wurde, oder null, wenn die Zuordnung keine Zuordnung für diesen Schlüssel enthält. Ein Rückgabewert von null gibt nicht unbedingt an, dass die Zuordnung keine Zuordnung für den Schlüssel enthält. Es ist auch möglich, dass die Karte den Schlüssel explizit auf Null abbildet. Die Methode containsKey kann verwendet werden, um diese beiden Fälle zu unterscheiden.