Wie berechne ich die Höhe von Symbolleisten, Adressleisten und anderen Navigationswerkzeugen in Pixeln?

8

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 ...?

    
user357535 05.08.2010, 16:54
quelle

4 Antworten

13

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.

Getestet in den folgenden Browsern funktioniert:

Wenn jemand es in anderen Browsern testen und mir Feedback geben kann, werde ich diese Antwort entsprechend modifizieren.

Verwenden von JQuery:

%Vor%

Ohne JQuery

%Vor%     
Yanick Rochon 05.08.2010 18:39
quelle
5

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)

    
Andy E 05.08.2010 17:36
quelle
2

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: Ссылка

    
Jan Šafránek 28.03.2012 13:57
quelle
1
%Vor%

Funktioniert in den meisten gängigen Browsern außer FF. Für mobile Webapps kann dies nützlich sein: -)

In FF können Sie Folgendes verwenden: window.screenX

Ссылка

    
Abdo 04.10.2012 09:52
quelle

Tags und Links

Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ answer3312808 ___

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.

    
___ answer3312826 ___

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.

    
___ answer3312832 ___

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.

    
___ answer3313703 ___

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.

    
___ qstntxt ___

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:

  1. Ändern Sie den Rückgabetyp in %code% Wrapper-Klasse und prüfen Sie auf %code%
  2. Geben Sie etwas sehr unwahrscheinlich zurück, z. B. %code%
  3. Erstellen Sie eine zusätzliche Funktion %code% , die immer zuerst aufgerufen werden sollte
  4. Wechseln Sie zu %code% und verwenden Sie stattdessen %code%

Ich schreibe dies in Java, aber Leute mit ähnlichen sprachlichen Hintergründen können gerne Beiträge schreiben. Danke!

    
___ answer3312837 ___

Option 5: Eine Ausnahme auslösen

In diesem Fall würde ich jedoch dafür stimmen, die Integer-Klasse zu verwenden.

    
___ answer3314439 ___

Zwei Situationen sind typisch:

  1. Sie haben eine hohe Erwartung von einen Wert für ein bestimmtes finden Schlüssel.
  2. Sie sind sich nicht sicher, ob es sich um einen bestimmten Schlüssel handelt hat einen Wert gespeichert.

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)

    
___ answer3312872 ___
  
  1. Ändern Sie den Rückgabetyp in die Integer-Wrapper-Klasse und prüfen Sie auf Null.
  2.   

Dies ist die häufigere Option.

    
___ answer3312849 ___

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.

    
___