Một giải pháp khác (và có thể sạch hơn) sẽ là tạo thêm (các) trình giữ chỗ Điều khiển bổ sung, ngoài 4 góc được cung cấp.
Một lợi thế tốt đẹp là nó cho phép đặt một số Điều khiển ở một trong các trình giữ chỗ đó. Họ sẽ ngăn xếp mà không chồng chéo, như trong các góc tiêu chuẩn.
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);
Sau đó, nó trở nên dễ dàng phong cách những placeholders với CSS, bởi vì cha mẹ DOM của họ là container chính bản đồ. Do đó, top
, bottom
, left
và right
có thể được xác định theo tỷ lệ phần trăm (sử dụng thứ nguyên của phụ huynh).
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;
}
Đối với vertical centering giữ chỗ riêng của mình, bạn có thể sử dụng kỹ thuật mà bạn yêu thích. Ở đây tôi đã sử dụng CSS3 Transform để bù đắp phần giữ chỗ bằng một nửa chiều cao của nó.
Nếu cần thiết (ví dụ: đối với khả năng tương thích của trình duyệt cũ), bạn có thể sử dụng phương pháp "tính toán khi tải" để thực hiện bù đắp này, tương tự như của iH8. Nhưng bạn không còn cần phải chạy nó trên bản đồ thay đổi kích thước, chỉ khi thêm mới Control (s) để giữ chỗ.
Demo: http://jsfiddle.net/ve2huzxw/8/
Đối với Leaflet 1.0.3, tôi cần bao gồm dòng 'z-index: 1000;' trong CSS cho trung tâm tờ rơi dọc. Nếu không, tôi có thể nhấp vào điều khiển nhưng nó không hiển thị. Bản trình diễn: http://jsfiddle.net/ve2huzxw/437/ – user2441511