Đặt điều khiển bên ngoài container bản đồ với Tờ rơi?


12

Ai đó có thể cho tôi biết làm thế nào tôi có thể đặt các điều khiển bên ngoài nội dung bản đồ bằng Tờ rơi không?

Trong trường hợp này, tôi chỉ muốn đặt điều khiển chuyển đổi lớp bên ngoài đối tượng bản đồ.

nhập mô tả hình ảnh ở đây

Câu trả lời:


18

Tờ rơi thực hiện rất nhiều cách vẫy tay để che giấu việc thực hiện cổng thông tin bản đồ nhưng may mắn cho bạn là họ đã nghĩ ra một giải pháp!

Các getContainerchức năng chỉ là những gì bạn cần. Điều này trả về nút HTML thực tế, không chỉ là đánh dấu.

Sau đó, nó dễ dàng như việc không tạo con (?) Nút và gán nó cho cha mẹ mới, với một vài dòng Javascript.

Ví dụ làm việc và bình luận (và một lát đá ass-ass)!

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

Mật mã

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

Bạn phải đệ quy đi qua tất cả trẻ em và gán lại cho cha mẹ chúng. Xem câu trả lời thứ hai cho một vòng lặp đệ quy đơn giản.

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


Công việc tốt đẹp. Đã bình chọn cho bạn, nhưng bạn có phiền khi thêm JavaScript có liên quan vào câu trả lời của mình không?
elrobis

a.appendChild(control.onAdd(map))nên là đủ. Xem thêm stackoverflow.com/questions/36041651/
Mạnh

Nó hoạt động tốt với giải pháp getContainer. Nhưng khi tôi thử với a.appendChild (control.onAdd (map)), tất cả các lớp wms và điều khiển lớp biến mất.
maurermo santos

Tôi cập nhật câu trả lời của tôi với một vòng lặp đệ quy để có được con, xin lỗi. Xin vui lòng cho tôi biết nếu điều này không làm việc.
Roma

@mauriciosantos Thật tệ, nó không hoạt động đơn giản như vậy L.control.layers.
ghybs

0

Cách đơn giản có thể tôi đã sử dụng:

Thêm thẻ html bên dưới, nơi bạn muốn di chuyển các điều khiển tờ rơi:

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

Mã 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]);
        }
 });
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.