Розміщення елементів керування поза контейнером карти за допомогою Leaflet?


13

Хтось може сказати мені, як я можу розміщувати елементи керування поза вмістом карти за допомогою Leaflet?

У цьому випадку я просто хочу розмістити управління перемикачем шарів поза об’єктом карти.

введіть тут опис зображення

Відповіді:


19

Листовка робить багато рукою, щоб приховати реалізацію порталу карт, але пощастило для вас, що вони придумали рішення!

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


Хороша робота. Ви вже проголосували, але чи не проти додати відповідний JavaScript у свою відповідь?
elrobis

a.appendChild(control.onAdd(map))повинно вистачити Дивіться також stackoverflow.com/questions/36041651 / ...
ghybs

Він добре працював з рішенням getContainer. Але коли я спробував із a.appendChild (control.onAdd (карта)), всі шари wms та контроль шарів зникають.
mauricio santos

Я оновлюю свою відповідь рекурсивним циклом, щоб отримати дітей, вибачте. Будь ласка, дайте мені знати, якщо це не працює.
RomaH

@mauriciosantos Моє погано, це не працює так просто L.control.layers.
ghybs

1

Простий можливий спосіб, який я використав:

Додайте нижче тегу HTML, куди потрібно перемістити елементи керування листівки:

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

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]);
        }
 });
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.