Özel Broşür Kontrolleri


16

Broşür için özel bir kontrol oluşturma konusunda biraz yardımım var, ancak hala Leaflet'in en son sürümleri tarafından kullanılan CSS stillerine yükseltme konusunda sorun yaşıyorum. Temel olarak, ihtiyacım olan tek şey beyaz kutuda, etrafında gölge olan bir simgedir.

Şimdiye kadar çalıştığım şey, bir göz atın ve çatallamaktan çekinmeyin:

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

Yanıtlar:


16

Anladım.

Demo için CodePen Demosuna bakın: http://codepen.io/DrYSG/pen/zJsiG

İlgili işi yapan JS ve CSS snippet'leri şunlardır:

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

ve 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;
}

Bir yorum olarak, kolay düğme eklentisi gelecekte bunun için iyi bir referans olacaktır.
Jason Scheirer

hey, ben codepen ( codepen.io/DrYSG/pen/zJsiG ) demo göremiyorum .
Kedar.Aitawdekar

Evet, kaldırıldı. Ancak kod sizin için çalışmalıdır.
Dr.YSG

8

Dr.YSG'nin cevabı gibi ancak Leaflet.draw CSS sınıflarını kullanma:

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

evet, bu da işe yarıyor.
Dr.YSG

Fab, sadece aradığım şey
Fiona - myaccessible.website

2

Evet, kolay düğme de iyi bir fikirdir. Bunu yakın zamanda tekrar ziyaret ettim ve yerleşimi (sadece köşeye değil, tam bir konuma) parametreleştirmeye izin veren bu RequireJS modülünü (AMD) oluşturdum ve ayrıca HTML belgesinden HTML içeriğini alıyor ve ve kontrol altına alır. İsterseniz bunu basitleştirebilirsiniz.

Invoke gibi bir şey yürütmek ve yeni bir örnek oluşturur:

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

0

Leaflet.EasyButton yukarıda belirtilmiş gibi görünüyor , ancak burada bazı örnek kod:

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

ve bazı css:

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

ve daha fazlasını arıyorsanız bir sürü demoyu bulabilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.