Wie erkennt man den Seitenzoom in allen modernen Browsern?
- Woran kann ich erkennen, die Seite zoom-Stufe in allen modernen Browsern? Während dieser thread erzählt, wie es in IE7 und IE8 kann ich nicht finden, ein gutes cross-browser-Lösung.
- Firefox speichert die Seite die Zoomstufe für den künftigen Zugang. Auf der ersten Seite zu laden, würde ich in der Lage sein, um die zoom-Stufe? Irgendwo habe ich gelesen es funktioniert, wenn ein zoom-änderung nach die Seite geladen wird.
- Gibt es eine Möglichkeit, die trap -
'zoom'
Veranstaltung?
Ich brauche das, weil einige meiner Berechnungen sind pixel-basiert und Sie können schwanken, wenn vergrößert.
Geändert Probe gegeben durch @tfl
Dieser Seite alerts unterschiedliche Werte für die Höhe, wenn vergrößert. [jsFiddle]
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js" type="text/javascript"/></script>
</head>
<body>
<div id="xy" style="border:1px solid #f00; width:100px;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque sollicitudin tortor in lacus tincidunt volutpat. Integer dignissim imperdiet mollis. Suspendisse quis tortor velit, placerat tempor neque. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Praesent bibendum auctor lorem vitae tempor. Nullam condimentum aliquam elementum. Nullam egestas gravida elementum. Maecenas mattis molestie nisl sit amet vehicula. Donec semper tristique blandit. Vestibulum adipiscing placerat mollis.</div>
<button onclick="alert($('#xy').height());">Show</button>
</body>
</html>
InformationsquelleAutor der Frage understack | 2009-11-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nun ist es ein noch größeres Chaos als damals, als diese Frage war zunächst gefragt. Aus der Lektüre alle Antworten und blog-posts, die ich finden konnte, hier eine Zusammenfassung. Ich habe auch einrichten diese Seite auf test-all diese Methoden zur Messung der zoom-Stufe.
Bearbeiten (2011-12-12): ich habe ein Projekt, das geklont werden kann: https://github.com/tombigel/detect-zoom
screen.deviceXDPI /screen.logicalXDPI
(oder, für die zoom-Ebene im Verhältnis zu Standard-zoom,screen.systemXDPI /screen.logicalXDPI
)var body = document.body,r = body.getBoundingClientRect(); return (r.left-r.right)/body.offsetWidth;
(Dank dieses Beispiel oder diese Antwort)screen.width
/media query, screen width (siehe unten) (die Tatsache zunutze, dassscreen.width
verwendet device-Pixel, aber MQ-Breite mit CSS-Pixel, die Dank der Quirksmode breiten)-webkit-text-size-adjust:none
.document.width /jQuery(document).width()
(Dank Dirk van Oosterbosch oben). Man-Verhältnis in Bezug auf die device-Pixel (statt relativ zum Standard-zoom), vermehren sich durchwindow.devicePixelRatio
.parseInt(getComputedStyle(document.documentElement,null).width) /document.documentElement.clientWidth
(aus diese Antwort)document.documentElement.offsetWidth
/Breite desposition:fixed; width:100%
div. von hier aus (Quirksmode breiten Tabelle sagt, es ist ein bug; innerWidth sollte CSS px). Wir verwenden die position:fixed element, um die Breite des Viewports einschließlich der Raum, in dem die scrollbars sind; Dokument.documentElement.clientWidth schließt diese Breite. Dieser ist gebrochen, seit irgendwann in 2011; ich kenne keinen Weg, um die zoom-Stufe in Opera nicht mehr.Hier ist eine binäre Suche für Firefox 4, da ich nicht weiß, der alle Variablen, denen er ausgesetzt ist:
InformationsquelleAutor der Antwort yonran
Für mich, für Chrome/Webkit,
document.width /jQuery(document).width()
hat nicht funktioniert. Wenn ich mein Fenster klein und vergrößert in meine Seite, so dass horizontale Scrollbalken erschien,document.width /jQuery(document).width()
nicht gleich 1 bei der Standard-zoom. Dies ist, weildocument.width
umfasst einen Teil des Dokuments außerhalb des Viewports.Mit
window.innerWidth
undwindow.outerWidth
gearbeitet. Für einige Grund in Chrom, outerWidth-gemessen in der Bildschirm-Pixel und innerWidth gemessen in css-Pixel.InformationsquelleAutor der Antwort user800583
Können Sie versuchen,
Dadurch erhalten Sie die browser-zoom-Prozentsatz.
Fangen zoom-Ereignis, das Sie verwenden können,
InformationsquelleAutor der Antwort user1080381
Mein Kollege und ich haben das Skript von https://github.com/tombigel/detect-zoom. Darüber hinaus haben wir auch dynamisch erzeugt eine svg-element und überprüfen Sie seine currentScale Eigenschaft. Es funktioniert großartig auf Chrom und wahrscheinlich die meisten Browser auch. FF-die "zoom" nur text" - Funktion muss ausgeschaltet sein obwohl. SVG ist unterstützt in den meisten Browsern. Zum Zeitpunkt des Schreibens dieses Artikels, getestet unter IE10, FF19 und Chrome28.
InformationsquelleAutor der Antwort Jay
Ich fand diesen Artikel sehr hilfreich. Riesen Dank an yonran. Ich wollte Euch auf einige zusätzliche lernen fand ich bei der Umsetzung einige der Techniken, die er zur Verfügung gestellt. In FF6 und Chrome 9, Unterstützung für media queries von JS Hinzugefügt wurde, die erheblich vereinfachen die media-query-Ansatz für die Bestimmung zoom im FF. Siehe die Dokumentation bei MDN hier. Für meine Zwecke, ich brauchte nur zu erkennen, ob der browser vergrößert oder verkleinert, ich hatte keine Notwendigkeit für den aktuellen zoom-Faktor. Ich war in der Lage, meine Antwort mit nur einer Zeile JavaScript:
Verbindung mit dem IE8+ und Webkit-Lösungen, die waren auch die einzigen Zeilen, ich war in der Lage zu erkennen, Zoomen Sie auf die überwiegende Mehrheit der Browser treffen unsere app mit nur ein paar Zeilen code.
InformationsquelleAutor der Antwort brianh
Das ist alles, was Sie brauchen.
InformationsquelleAutor der Antwort Alex von Thorn
In Internet Explorer 7, 8 & 9, das funktioniert:
"+0.9" wird Hinzugefügt, um zu verhindern, dass die Rundungsfehler (sonst würden Sie erhalten, 104% und 109%, wenn der browser-zoom ist eingestellt auf 105% und 110%).
Im IE6 zoom nicht vorhanden ist, so ist es unnötig zu prüfen, zoom.
InformationsquelleAutor der Antwort pench
Dieser gearbeitet hat ideal für mich, in webkit-basierten Browsern (Chrome, Safari):
Scheint nicht zu funktionieren, im Firefox aber.
Funktioniert das auch in WebKit:
InformationsquelleAutor der Antwort rudolfrck
Habe ich eine Lösung für dieses wie Jan 2016. Getestet in Chrome, Firefox und MS-Edge-Browser.
Das Prinzip ist wie folgt. Sammeln 2 MouseEvent Punkte, die weit auseinander liegen. Jeder Maus-event-kommt mit Bildschirm und Dokument-Koordinaten. Messen Sie den Abstand zwischen den 2 Punkten in beiden Koordinatensystemen. Es gibt zwar variable festen offsets zwischen den Koordinatensystemen durch die browser-Möbel, die Entfernung zwischen die Punkte sollten identisch sein, wenn die Seite nicht gezoomt. Der Grund für die Angabe "weit auseinander" (ich habe dies als 12 Pixel), so dass kleine zoom-änderungen (z.B. 90% oder 110%) nachweisbar sind.
Referenz:
https://developer.mozilla.org/en/docs/Web/Events/mousemove
Schritte:
Fügen Sie ein mouse move listener
Capture 4 Messungen von Maus-events:
Messen Sie den Abstand d_c zwischen den 2 Punkten in das client-system
Messen Sie den Abstand d_s zwischen die 2 Punkte im Bildschirm system
Wenn d_c != d_s dann zoom angewendet wird. Der Unterschied zwischen den beiden sagt, dass Sie die Menge an zoom.
N. B. Nur die Entfernung Berechnungen nur selten, z.B. wenn Sie können, probieren Sie eine neue Maus-Ereignis, das weit von der vorigen.
Einschränkungen: Nimmt Benutzer die Maus bewegen, zumindest ein wenig, und zoom ist unerkennbar bis zu diesem Zeitpunkt.
InformationsquelleAutor der Antwort user1191311
Ihre Berechnungen basieren noch auf eine Reihe von CSS-Pixeln. Sie sind einfach eine andere Größe auf dem Bildschirm jetzt. Das ist der Punkt der full page zoom.
Was würden Sie wollen, zu geschehen, in einem browser auf einem 192dpi Gerät die deshalb in der Regel angezeigt, vier Geräte-Pixel für jedes pixel in einem Bild? Bei 50% zoom das Gerät zeigt jetzt einen Bildpunkt in einem Gerät-pixel.
InformationsquelleAutor der Antwort Neil
Was ich kam mit :
1)
position:fixed
<div>
mitwidth:100%
(id=zoomdiv)2) wenn die Seite geladen wird :
Und es funktionierte für mich für
ctrl+
undctrl-
zoomt.oder kann ich die Zeile hinzufügen, um eine
$(window).onresize()
Veranstaltung, um die aktiven zoom-StufeCode:
P. S. : dies ist mein Erster Beitrag, verzeihen keine Fehler
InformationsquelleAutor der Antwort Abhishek Borar
Nicht getestet für IE, aber wenn Sie ein element
elem
mitdann
geben Sie Ihre browser-zoom-Stufe (einschließlich der
document.body.style.zoom
Faktor).InformationsquelleAutor der Antwort Dirk van Oosterbosch
Dies ist für Chromeim Zuge der user800583 Antwort ...
Ich verbrachte ein paar Stunden an diesem problem und habe nicht gefunden ein besserer Ansatz, aber :
window.outerWidth/window.innerWidth
und wenn es nicht ist, das Verhältnis scheint(window.outerWidth-16)/window.innerWidth
aber der 1. Fall lässt sich mit den 2.So kam ich zu den folgenden ...
Doch dieser Ansatz hat Grenzen : zum Beispiel, wenn Sie spielen das Akkordeon mit der Anwendung Fenster (schnell vergrößern und verkleinern Sie die Breite des Fensters), dann erhalten Sie Lücken zwischen den zoom-Stufen, obwohl der zoom hat sich nicht geändert (kann sein, outerWidth und innerWidth sind nicht gerade aktualisiert, in der gleichen Zeit).
Und wenn Sie möchten, dass der Faktor :
InformationsquelleAutor der Antwort jeum
Habe ich diese Lösung für mobile nur (getestet mit Android):
Wenn Sie möchten, dass die zoom-Stufe direkt nach der Prise bewegen, werden Sie wahrscheinlich haben, um einen kleinen timeout, weil der rendering-delay (aber ich bin mir nicht sicher, weil ich nicht testen).
InformationsquelleAutor der Antwort pmrotule
InformationsquelleAutor der Antwort ali
Grundsätzlich haben wir:
window.devicePixelRatio
die berücksichtigt sowohl browser-Ebene zoom* sowie system-zoom - /pixel-Dichte.* — auf Mac/Safari zoom-Stufe nicht berücksichtigt
vw
/vh
CSS-Einheitenresize
Ereignis, das ausgelöst wird bei zoom-level zu ändern, dazu führen, dass effektive Größe des Fensters ändertdas sollte genug sein für normalen UX. Wenn Sie brauchen, um festzustellen, zoom-Stufe, das wäre ein Zeichen der schlechten UI-design.
Pitch-zoom ist schwieriger zu verfolgen, und ist nicht als derzeit.
InformationsquelleAutor der Antwort kirilloid
Diese Antwort basiert auf Kommentare über devicePixelRatio wieder kommen falsch auf user1080381 Antwort.
Fand ich, dass dieser Befehl war auf dem Rückweg fälschlicherweise in einigen Instanzen auch bei der Arbeit mit einem desktop, Surface Pro 3 und Surface Pro 4.
Was ich gefunden habe ist, dass es funktioniert auf meinem desktop, aber der SP3 und SP4 wurden, geben unterschiedliche zahlen von einander und den desktop.
Bemerkte ich aber, dass das SP3 wurde wieder als 1 und eine halbe mal die zoom-Stufe, die ich erwarte. Als ich einen Blick auf die display-Einstellungen, das SP3 wurde eigentlich eingestellt, um 150% anstatt der 100% hatte ich auf meinem desktop.
So, die Lösung für die Kommentare sollten zu teilen zurückgegeben zoom-Stufe durch die Skalierung der Maschine, an der Sie sich gerade befinden.
War ich in der Lage, um die Skalierung in den Einstellungen von Windows, indem Sie Folgendes tun:
So, in dem Fall von meinem SP3, dies ist, wie dieser code sieht bei 100% - zoom:
Durch Multiplikation mit 100 in user1080381 ursprünglichen Antwort, dann würde Ihnen ein zoom von 100 (%).
InformationsquelleAutor der Antwort Cameron Weaver
Liegt das problem in der Art von monitor verwendet wird, ist ein 4k-monitor vs-standard-monitor. Chrome ist mit Abstand der Klügste in der Lage sind, uns zu sagen, was die zoom-Stufe ist nur durch die Verwendung
window.devicePixelRatio
er, offenbar kann sagen, was die Pixeldichte und Berichte zurück, die gleiche Nummer, egal was.Anderen Browsern, nicht so viel. IE und Edge sind wahrscheinlich das Schlimmste, als Sie mit der zoom-Stufen sehr unterschiedlich. Um die gleiche Größe von text auf einem 4k-monitor haben, müssen Sie 200% anstatt 100% auf einem standard-monitor.
Mai 2018, hier ist, was ich habe, um zu erkennen, zoom-Stufen für ein paar von den gängigsten Browsern, Chrome, Firefox und IE11. Ich habe es mir sagen, was der Zoomfaktor ist. Für IE, meldet es 100% auch für 4k-Monitore, die sind eigentlich bei 200%, aber der text Größe ist wirklich der gleiche.
Hier ist ein Turnschuh: https://jsfiddle.net/ae1hdogr/
Wenn sich jemand kümmern würde, zu nehmen einen Stich an andere Browser und aktualisieren Sie die fiddle, dann tun Sie dies bitte. Mein Hauptziel war es, bekommen diese 3 Browser erfasst, um zu erkennen, wenn Menschen mit einem zoom-Faktor größer als 100%, um meine web-Anwendung und zeigt eine Benachrichtigung, die darauf hindeutet Vermieter zoom-Faktor.
InformationsquelleAutor der Antwort Bill_VA
Auf mobile Geräte (mit Chrome für Android oder Opera Mobile) können Sie erkennen, Zoomen Sie, indem Fenster.visualViewport.Maßstab.
https://developer.mozilla.org/en-US/docs/Web/API/Visual_Viewport_API
Erkennen auf Safari: Dokument.documentElement.clientWidth /Fenster.innerWidth (gibt 1 zurück, wenn kein Zoomen auf dem Gerät).
InformationsquelleAutor der Antwort JIm
hier es nicht ändern!:
erstellen Sie eine einfache html-Datei, klicken Sie auf die Schaltfläche. unabhängig davon, welchen zoom-level: es wird Ihnen zeigen, die Breite von 400px (zumindest mit firefox und ie8)
InformationsquelleAutor der Antwort
Dies kann oder kann nicht jedem helfen, aber ich hatte eine Seite, die ich nicht bekommen konnte, um Mitte richtig, egal welche Css-tricks habe ich versucht, also schrieb ich eine JQuery-Datei call-Center Seite:
Das problem aufgetreten ist mit dem zoom-level des Browsers, die Seite würde sich wandeln, basierend auf, wenn Sie zu 100%, 125%, 150%, etc.
Den folgenden code in ein JQuery-Datei namens centerpage.js.
Von meiner Seite hatte ich einen link zu JQuery und diese Datei zu bekommen, es funktioniert, obwohl mein master-Seite bereits einen link mit JQuery.
centerpage.js
:Auch wenn Sie wollen-center ein panel:
InformationsquelleAutor der Antwort user1054326
Diese Frage gepostet wurde, wie eine Ewigkeit zurück, aber heute, wenn ich war auf der Suche für die gleiche Antwort "zu erkennen, Wie zoom in und out-Ereignis", konnte ich nicht finden, eine Antwort, die passen würde allen Browsern.
Als jetzt : Für Firefox/Chrome/IE8 und IE9 , der zoom in und out, feuert ein Fenster.resize-Ereignis.
Diese kann erfasst werden über:
InformationsquelleAutor der Antwort Bhumi Singhal
Einen workaround für FireFox 16+ finden, DPPX (zoom-Stufe) rein mit JavaScript:
InformationsquelleAutor der Antwort lexasss
Das ist gut:
InformationsquelleAutor der Antwort زياد