Может кто-нибудь сказать мне, как я могу разместить элементы управления вне содержимого карты с помощью Leaflet?
В этом случае я просто хочу разместить элемент управления переключателем слоев вне объекта карты.
Leaflet много размахивает руками, чтобы скрыть реализацию картографического портала, но, к счастью для вас, они нашли решение!
getContainer
Функция только то , что вам нужно. Это возвращает фактический узел HTML, а не только разметку.
Тогда это так же просто, как отменить (?) Узел и назначить его новому родителю с помощью пары строк Javascript.
Рабочий пример и комментарии (и потрясающий тайлсет)!
http://codepen.io/romahicks/pen/ONmPmp
Код
//Create Layer
var baseMap = new L.TileLayer('http://{s}.tiles.mapbox.com/v3/gvenech.m13knc8e/{z}/{x}/{y}.png' );
var baseMapIndex = {
"Map": baseMap
};
// Create the map
var map = new L.map('map', {
center: new L.LatLng(41.019829, 28.989864),
zoom: 14,
maxZoom: 18,
zoomControl: false, // Disable the default zoom controls.
layers: baseMap
});
// Create the control and add it to the map;
var control = L.control.layers(baseMapIndex);
control.addTo(map);
// Call the getContainer routine.
var htmlObject = control.getContainer();
// Get the desired parent node.
var a = document.getElementById('new-parent');
// Finally append that node to the new parent, recursively searching out and re-parenting nodes.
function setParent(el, newParent)
{
newParent.appendChild(el);
}
setParent(htmlObject, a);
Вы должны рекурсивно пройти через всех детей и переназначить их своим родителям. Смотрите второй ответ для простого рекурсивного цикла.
/programming/20910147/how-to-move-all-html-element-children-to-another-parent-using-javascript
a.appendChild(control.onAdd(map))
должно быть достаточно. См. Также stackoverflow.com/questions/36041651/…L.control.layers
.Простой возможный способ, который я использовал:
Добавьте ниже HTML-тег, куда вы хотите переместить элементы управления листовки:
Код JavaScript:
источник