Ein andere Lösung (und wahrscheinlich sauber) wären zusätzliche Steuer Platzhalter zu erstellen (s), neben den 4 vorgesehen Ecken.
Ein schöner Vorteil ist, dass es mehrere Steuerelemente in einem dieser Platzhalter erlaubt setzen. Sie werden gestapelt, ohne sich zu überlappen, wie in den Standardecken.
JavaScript:
// Create additional Control placeholders
function addControlPlaceholders(map) {
var corners = map._controlCorners,
l = 'leaflet-',
container = map._controlContainer;
function createCorner(vSide, hSide) {
var className = l + vSide + ' ' + l + hSide;
corners[vSide + hSide] = L.DomUtil.create('div', className, container);
}
createCorner('verticalcenter', 'left');
createCorner('verticalcenter', 'right');
}
addControlPlaceholders(map);
// Change the position of the Zoom Control to a newly created placeholder.
map.zoomControl.setPosition('verticalcenterright');
// You can also put other controls in the same placeholder.
L.control.scale({position: 'verticalcenterright'}).addTo(map);
Dann wird es einfach Styling diese Platzhalter mit CSS, weil ihre DOM Eltern der Behälter selbst Karte ist. Daher können top
, bottom
, left
und right
mit Prozentsätzen angegeben werden (die die Dimensionen des übergeordneten Elements verwenden).
CSS:
.leaflet-verticalcenter {
position: absolute;
top: 50%; /* possible because the placeholder's parent is the map */
transform: translateY(-50%); /* using the CSS3 Transform technique */
padding-top: 10px;
}
.leaflet-verticalcenter .leaflet-control {
margin-bottom: 10px;
}
Was vertical centering der Platzhalter selbst, können Sie Ihre Lieblings-Technik verwenden. Hier habe ich die CSS3-Transformation verwendet, um den Platzhalter um die Hälfte seiner eigenen Höhe zu versetzen.
Falls erforderlich (beispielsweise für alte Browser-Kompatibilität), können Sie eher eine „berechnen-on-load“ Methode verwenden, um diese, ähnlich wie iH8 den Offset durchzuführen. Sie müssen es jedoch nicht mehr auf der Karten-Größenänderung ausführen, wenn Sie dem Platzhalter neue Steuerelemente hinzufügen.
Demo: http://jsfiddle.net/ve2huzxw/8/
Für Leaflet 1.0.3, musste ich die Zeile "Z-Index: 1000;" in der CSS für Leaflet-vertikale Mitte enthalten. Sonst könnte ich auf das Steuerelement klicken, aber es war nicht sichtbar. Demo: http://jsfiddle.net/ve2huzxw/437/ – user2441511