Posizionamento dei controlli all'esterno del contenitore della mappa con Leaflet?


13

Qualcuno può dirmi come posso posizionare i controlli al di fuori del contenuto della mappa con Leaflet?

In questo caso, voglio solo posizionare il controllo dell'interruttore di livello all'esterno dell'oggetto mappa.

inserisci qui la descrizione dell'immagine

Risposte:


19

Il volantino fa molto agitando le mani per nascondere l'implementazione del portale della mappa ma per fortuna hanno pensato a una soluzione!

La getContainerfunzione è proprio ciò di cui hai bisogno. Ciò restituisce il nodo HTML effettivo, non solo il markup.

È quindi semplice come non figlio (?) Il nodo e assegnarlo a un nuovo genitore, con un paio di righe di Javascript.

Esempio funzionante e commenti (e un set di piastrelle kick-ass)!

http://codepen.io/romahicks/pen/ONmPmp

Il codice

//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);

Devi ricorrere in modo ricorsivo a tutti i bambini e riassegnarli al loro genitore. Vedi la seconda risposta per un semplice ciclo ricorsivo.

/programming/20910147/how-to-move-all-html-element-children-to-another-parent-using-javascript


Bel lavoro. Hai già votato, ma ti dispiacerebbe aggiungere il JavaScript pertinente alla tua risposta?
elrobis

a.appendChild(control.onAdd(map))dovrebbe essere abbastanza. Vedi anche stackoverflow.com/questions/36041651/...
ghybs

Ha funzionato bene con la soluzione getContainer. Ma quando ho provato con a.appendChild (control.onAdd (mappa)), tutti i livelli wms e il controllo dei livelli scompaiono.
Maurizio Santos,

Aggiorna la mia risposta con un ciclo ricorsivo per ottenere bambini, mi dispiace. Per favore fatemi sapere se questo non funziona.
RomaH,

@mauriciosantos Mio male, non funziona semplicemente per L.control.layers.
ghybs

1

Modo semplice possibile che ho usato:

Aggiungi sotto il tag html, dove vuoi spostare i controlli del volantino:

<div id="custom-map-controls"></div>

Codice 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]);
        }
 });
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.