we are hooking up an eye-tracker to control the leaflet map (pan, zoom etc.) We would like to have a custom control that appears at the center of the map (for menu functions) Currently Leaflet does not support position: 'center') (topleft, etc. is supported) ideas?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
Adding a custom control on a map on leaflet is performed like that .
For instance for a logo :
var logo= L.control({
position : 'topleft'
});
logo.onAdd = function(map) {
this._div = L.DomUtil.create('div', 'myControl');
var img_log = "<div class="myClass"><img src=\"images/logo.png\"></img></div>";
this._div.innerHTML = img_log;
return this._div;
}
logo.addTo(map);
Then, you can add CSS style to myClass to center it: (this part has not been tested by myself)
.myClass {
padding-top:50%;
padding-left: 50%;
}
回答2:
You can simply override the .leaflet-left class to this, and your control will be centered horizontally.
.leaflet-left {
left: 50%;
transform: translate(-50%, 0%);
}
And to center vertically, just override the class .leaflet-top to this:
.leaflet-top {
top: 50%;
transform: translate(0%, -50%);
}
NOTE: These changes will affect other controls on the map such as zoom controls.
EDIT:
If you want to add the functionality to leaflet so that the other controls arent affected, you can do this:
leaflet.js: Beginning at line 4900 I believe?
t("top", "left"),
t("top", "right"),
t("bottom", "left"),
t("bottom", "right"),
Add these two lines:
t("top", "center"),
t("bottom", "center")
This would allow for use of positions 'topcenter' and 'bottomcenter'
Then simply add css class for 'leaflet-center':
.leaflet-center {
left: 50%;
transform: translate(-50%, 0%);
}