In meiner Webanwendung möchte ich Benutzern ermöglichen, die Größe des Kartencontainers festzulegen.
Alles hat gut funktioniert, als der Container leicht erweitert wurde (anscheinend, weil die Fliesen, die sich direkt hinter der Grenze befanden, bereits geladen waren). Wenn der Container jedoch erheblich erweitert wird (im folgenden Beispiel von 300 auf 1000 Pixel Breite), verbleibt ein leerer Bereich.
Wie kann ich die Karte neu zeichnen und an die neue Größe anpassen?
Das Aufrufen redraw()
aller Ebenen hat nicht geholfen. Zoomen und Zoomen nicht.
Ich habe dies mit den beschriebenen Ergebnissen in Opera, Chrome und Firefox getestet. In IE8 trat das Problem überraschenderweise nicht auf und die Karte wurde automatisch angepasst.
Eine vereinfachte Webseite zum Testen:
<html>
<head>
<style>
#mapbox {
width: 300px;
height: 500px;
border: 1px solid black;
}
</style>
<script src="http://openlayers.org/api/OpenLayers.js"></script>
</head>
<body>
<div id="mapbox"></div>
<input type="button" id="test" value="resize">
<script>
var map = new OpenLayers.Map('mapbox');
map.addLayer(new OpenLayers.Layer.OSM());
map.setCenter(
new OpenLayers.LonLat(1000000, 7000000), 5);
document.getElementById('test').onclick = function() {
document.getElementById('mapbox').style.width = '1000px';
}
</script>
</body>
</html>
body onload=init()
undinit
initialisiert die Karte. Liegt es daran? Wäre dies auch eine gute Lösung für Responsive Design?window.onload=window.onresize=function(){//resize here
. Vielen DanksetInterval
, die alle 200 ms ausgeführt wird, dann muss ein Boolescher Wert aufvar didResize
gesetzttrue
onresize()
werden undfalse
danachmap.updateSize()
wird aufgerufen.Ja, verwenden map.updateSize () als Vadim sagt (auch nicht sicher , warum die Verzögerung!) Dokumentation
Ich habe Karten normalerweise mit einer Vollbild-Umschaltfläche versehen, die einfach durch Umschalten der CSS-Klasse des Kartencontainers und anschließenden Aufruf von updateSize () funktioniert.
quelle
Ist nicht elegant, hat aber bei mir gut funktioniert
quelle
Noch ein Kommentar zur ersten (richtigen) Antwort:
Das Timeout-Event wird benötigt, wenn Sie auf das window.resize-Event warten. Andernfalls wird die Größe der Karte jede Millisekunde geändert, wenn ein Benutzer die Größe des Fensters ändert (ich brauchte es für Firefox). Wenn Sie also nach der Fenstergröße suchen möchten, ist das Timeout sehr nützlich. erforderlich. Siehe: https://stackoverflow.com/questions/5489946/jquery-how-to-wait-for-end-or-resize-event-and-only-then-perform-an-ac oder jQuery resize end event
(Entschuldigung, ich kann keinen Kommentar hinzufügen, daher eine andere Antwort)
quelle
Ich habe alle hier beschriebenen Dinge ausprobiert, aber nichts hat für mich funktioniert. Als ich der Karte eine Vollbildklasse hinzufügte, wurde das Größenänderungsereignis nicht ausgelöst. Ich behebe das mit:
quelle
Die Art und Weise, wie setTimeout oben verwendet wird, ist für mich nicht sehr sinnvoll (möglicherweise eine Problemumgehung für eine ältere OL-Version), aber setTimeout kann verwendet werden, um die Anzahl der Aufrufe von map.updateSize () und anderen zugehörigen Codes zu verringern Dies:
quelle
Ich denke, dass das Ändern des Stils von Map Div automatisch die Größe des Map Panels ändert.
ich hoffe es hilft dir ...
quelle
Das funktioniert bei mir:
Der $ nextTick ist wichtig, da auf die nächste Aktualisierung gewartet werden kann, bevor die neue Größe des Kartencontainers berücksichtigt wird.
quelle