Alguém pode me dizer como posso colocar controles fora do conteúdo do mapa com o Leaflet?
Nesse caso, eu só quero colocar o controle do switch de camada fora do objeto do mapa.
Alguém pode me dizer como posso colocar controles fora do conteúdo do mapa com o Leaflet?
Nesse caso, eu só quero colocar o controle do switch de camada fora do objeto do mapa.
Respostas:
O Folheto faz um aceno manual para ocultar a implementação do portal do mapa, mas, para sua sorte, eles pensaram em uma solução!
A getContainer
função é exatamente o que você precisa. Isso retorna o nó HTML real, não apenas a marcação.
É então tão fácil quanto não criar (?) O nó e atribuí-lo a um novo pai, com algumas linhas de Javascript.
Exemplo de trabalho e comentários (e um conjunto de peças incríveis)!
http://codepen.io/romahicks/pen/ONmPmp
O código
//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);
Você deve recursivamente passar por todos os filhos e atribuí-los novamente aos pais. Veja a segunda resposta para um loop recursivo simples.
/programming/20910147/how-to-move-all-html-element-children-to-another-parent-using-javascript
a.appendChild(control.onAdd(map))
deve ser suficiente. Veja também stackoverflow.com/questions/36041651/…
L.control.layers
.
Maneira possível simples que eu usei:
Adicione a tag html abaixo, para onde você deseja mover os controles do folheto:
<div id="custom-map-controls"></div>
Código JavaScript:
$(document).ready(function () {
var newParent = document.getElementById('custom-map-controls');
var oldParent = document.getElementsByClassName("leaflet-top leaflet-right")
while (oldParent[0].childNodes.length > 0) {
newParent.appendChild(oldParent[0].childNodes[0]);
}
});