Kontrol Leaflet Kustom

16

Saya telah mendapat bantuan dalam membuat kontrol kustom untuk leaflet, tetapi saya masih mengalami kesulitan untuk meningkatkan ke gaya CSS yang digunakan oleh versi terbaru dari Leaflet. Pada dasarnya, yang saya butuhkan adalah ikon di kotak putih, dengan drop shadow di sekitarnya.

Inilah yang telah saya kerjakan sejauh ini, lihatlah dan merasa bebas untuk membayarnya:

http://codepen.io/DrYSG/pen/zJsiG

Dr.YSG
sumber

Jawaban:

16

Mengerti.

Untuk melihat demo di Demo CodePen: http://codepen.io/DrYSG/pen/zJsiG

Berikut adalah JS dan cuplikan CSS yang melakukan pekerjaan yang relevan:

L.Control.Command = L.Control.extend({
    options: {
        position: 'topleft',
    },

    onAdd: function (map) {
        var controlDiv = L.DomUtil.create('div', 'leaflet-control-command');
        L.DomEvent
            .addListener(controlDiv, 'click', L.DomEvent.stopPropagation)
            .addListener(controlDiv, 'click', L.DomEvent.preventDefault)
        .addListener(controlDiv, 'click', function () { MapShowCommand(); });

        var controlUI = L.DomUtil.create('div', 'leaflet-control-command-interior', controlDiv);
        controlUI.title = 'Map Commands';
        return controlDiv;
    }
});

L.control.command = function (options) {
    return new L.Control.Command(options);
};

dan CSS:

.leaflet-control-command-interior
{
    background-image: url(images/command.png);
    width: 20px;
    height: 20px;
    background-position: 50% 50%;
    background-repeat: no-repeat;
    display: block;
    padding: 3px;
    border-radius: 4px;
    -webkit-border-radius: 4px;
    -moz-border-radius: 4px;
    box-shadow: 0 1px 7px rgba(0, 0, 0, 0.65);
    cursor: auto;
    text-align: center;
    background-color: #FFFFFF;
}

.leaflet-control-command-interior:hover
{
    background-color: #F4F4F4;
}
Dr.YSG
sumber
Sama seperti komentar, plugin tombol yang mudah akan membuat referensi yang baik untuk ini di masa depan.
Jason Scheirer
hei, saya tidak dapat melihat demo di codepen ( codepen.io/DrYSG/pen/zJsiG ).
Kedar.Aitawdekar
Ya, itu sudah dihapus. Tetapi kode harus bekerja untuk Anda.
Dr.YSG
8

Suka jawaban Dr.YSG tetapi gunakan kelas Leaflet.draw CSS:

L.Control.RemoveAll = L.Control.extend(
{
    options:
    {
        position: 'topleft',
    },
    onAdd: function (map) {
        var controlDiv = L.DomUtil.create('div', 'leaflet-draw-toolbar leaflet-bar');
        L.DomEvent
            .addListener(controlDiv, 'click', L.DomEvent.stopPropagation)
            .addListener(controlDiv, 'click', L.DomEvent.preventDefault)
        .addListener(controlDiv, 'click', function () {
            drawnItems.clearLayers();
        });

        var controlUI = L.DomUtil.create('a', 'leaflet-draw-edit-remove', controlDiv);
        controlUI.title = 'Remove All Polygons';
        controlUI.href = '#';
        return controlDiv;
    }
});
var removeAllControl = new L.Control.RemoveAll();
map.addControl(removeAllControl);
SpiderWan
sumber
ya, itu juga berfungsi.
Dr.YSG
Hebat, hanya apa yang saya cari
Fiona - myaccessible.website
2

Ya, tombol yang mudah adalah ide yang bagus juga. Saya meninjau kembali ini baru-baru ini, dan saya membuat ini modul RequireJS (AMD) yang memungkinkan parameter penempatan (tidak hanya ke sudut, tetapi ke lokasi yang tepat) dan juga mengambil konten HTML dari dokumen HTML, dan kemudian merobeknya keluar DOM dan menempatkannya ke dalam kontrol. Anda dapat menyederhanakan ini jika Anda mau.

untuk menjalankan sesuatu seperti ini dan itu akan membuat contoh baru:

var zoomIn = new Button(map);
zoomIn.setup('zControl', 'zoomInCtrl', Config.ZinTop, Config.ZinLeft, "zoomIn");

...

define(['jquery', 'leaflet', 'Config', 'Tools'], function ($, L, Config, Tools) {
    function Button(Map, className, id, top, left) {
        var self = this;
        self.bbox = null;
        self.Map= Map;
        self.top = top;
        self.left = left;
        self.action = null;

        self.setup = function (className, id, top, left, action) {
            var button = L.control({
                position: 'bottomleft'
            });
            self.action = action;
            button.onAdd = function (map) {
                var box = L.DomUtil.create('div', className);
                box.innerHTML = $("#" + id).html();
                $("#" + id).remove();
                $(box).attr("id", id);
                $(box).css("position", "fixed");
                $(box).css("top", top);
                $(box).css("left", left);
                self.bbox = box;
                return box;
            };
            self.Map.MAP.addControl(button);
        }

        self.hit = function (cmd) {
            var rect = self.bbox.getBoundingClientRect();
            var box = { top: rect.top, bottom: rect.bottom, left: rect.left, right: rect.right };
            var target = Tools.outset(box, Config.ButtonOutset);
            var hit = Tools.contains(Tools.cmdToPoint(cmd), target);
            return hit;
        }

        self.pick = function (cmd) {
            $(self.bbox).addClass("large");
        }

        self.unpick = function () {
            $(self.bbox).removeClass("large");
        }

        self.invoke = function (cmd) {
            self.Map[self.action]();
        }
    }
    return Button;
});
Dr.YSG
sumber
0

Sepertinya Leaflet.EasyButton disebutkan di atas, tetapi inilah beberapa contoh kode:

var myImage = '<img class="button-image" src="image-for-icon.jpg"/>';

L.easyButton( myImage, function(btn,map){ 
    // your stuff to do 'on click' 
}, 'title for the button').addTo(map);

dan beberapa css:

.button-image{
  display: block;
  height: auto;
  margin: auto;
  max-width: 100%;
}

dan banyak demo jika Anda mencari lebih banyak.

pengguna3276552
sumber