Ich lief in einem ähnlichen Problem, eher das Gegenteil, denke ich, aber die Lösung ist sicherlich die gleiche. In meinem Fall habe ich ein Thumbnail, auf das Leute klicken, das ein "Popup" öffnet, in das Benutzer wahrscheinlich hineinzoomen, um besser zu sehen, und wenn ich einmal fertig bin, möchte ich auf die normale Seite mit einer Skala von 1.0 zurückkehren.
Um das zu tun, schaute ich mich ziemlich um, bis ich verstand, was passiert und dann den richtigen Code schreiben konnte.
Die Viewportdefinition in den Metadaten ist ein Live-Wert. Bei einer Änderung berücksichtigt das System den neuen Wert und korrigiert das Rendering entsprechend. die „wenn geändert“ durch die GUI erkannt wird jedoch und während des JavaScript-Code ausgeführt wird, der GUI-Thread wird meist blockiert ...
Mit dem im Verstand, bedeutete es, dass so etwas tun würde scheitern:
Also, da der einzige Weg, den ich gefunden habe, um die Skala zu beheben, es durch eine Änderung zu erzwingen, die ich nicht behalten will, muss ich auf das Original zurücksetzen. Aber die intermediären Veränderungen werden nicht betrachtet und handeln (großartige Optimierung!). Wie lösen wir dieses Problem? Ich benutzte die setTimeout()
Funktion:
viewport = jQuery("meta[name='viewport']");
original = viewport.attr("content");
force_scale = original + ", maximum-scale=1";
viewport.attr("content", force_scale);
setTimeout(function()
{
viewport.attr("content", original);
}, 100);
Here I 100ms schlafen, bevor das Ansichtsfenster zurück zum Zurücksetzen, was ich als normal. Auf diese Weise berücksichtigt das Ansichtsfenster den Parameter maximum-scale=1
, dann wird das Zeitlimit überschritten und dieser Parameter entfernt. Die Skalierung wurde dabei wieder auf 1 zurückgesetzt, und die Wiederherstellung meines Originals (ohne Parameter maximum-scale
) funktioniert wie erwartet (d. H. Ich kann die Schnittstelle erneut skalieren.)
WARNUNG 1: Wenn Sie einen maximum-scale
Parameter in Ihrem ursprünglichen haben, möchten Sie wahrscheinlich es stattdessen ersetzen nur einen anderen Wert am Ende wie in meinem Beispielcode anhängt. (Dh force_scale = original.replace(/maximum-scale=[^,]+/, "maximum-scale=1")
würde das ersetzen tun - aber das funktioniert nur, wenn es bereits eine maximum-scale
, so dass Sie zunächst für beide Fälle überprüfen zu können, benötigen.)
WARNUNG 2: Ich habe versucht, mit 0 ms statt 100 ms und es scheitert. Dies kann von Browser zu Browser unterschiedlich sein, aber die Mozilla-Familie führt den sofort abgelaufenen Timer-Code nacheinander aus, was bedeutet, dass der GUI-Prozess nie eine Chance hat, die Waage auf 1 zurückzusetzen, bevor die Funktion zum Zurücksetzen des Viewports ausgeführt wird. Auch ich kenne einen Weg, zu wissen, dass die aktuellen Darstellungswerte wurden von der GUI gearbeitet ... (dh dies ein Hack ist, leider.)
vielleicht kann Ihnen das helfen? http://stackoverflow.com/questions/17440196/zoom-in-and-zoom-out-funktionality-in-jquery-mobile-or-avascript –
Ich sah diesen Beitrag früher und ich glaube nicht, dass es mir helfen wird . Ich beziehe mich auf den Pinch-Zoom, den mobile Geräte ausführen können, nicht auf CSS. Gibt es alternativ dazu eine Möglichkeit, die Zoomstufe des Browsers zu erkennen? AFAIK, Tools wie 'detect-zoom' sind mit neueren Versionen der Browser kaputt. –