2017-03-21 1 views
0

Ist es möglich eine Ebene wie imageOverlay mit html Markup in Leaflet map einzubetten? Vielleicht mit einem Plugin? Ich habe versucht, es mit Popup zu setzen, aber ich brauche mehr Kontrolle über die X- und Y-Koordinaten. Es ist also keine Lösung für meinen Fall.Leaflet: Set HTML Block wie L.ImageOverlay

+0

Benötigen Sie die HTML-Ebene, um mit dem Zoom zu skalieren oder nicht? Ein kleines Bild würde wahrscheinlich helfen. – ghybs

+0

Ja, es sollte zoombar sein. – User

+0

[Hier finden Sie das Beispiel] (http://jsfiddle.net/user9090900/3tf7o40u/) – User

Antwort

1

Wenn Sie die Leaflet tutorials auf lesen, wie Leaflet zu erweitern und Plugins machen, und haben einen Blick auf die source code for L.ImageOverlay, wird die Antwort ganz einfach:

L.HtmlBlockOverlay = L.ImageOverlay.extend({ 
    initialize: function(bounds, options) { 
    return L.ImageOverlay.prototype.initialize.call(this, null, bounds, options); 
    }, 

    _initImage: function() { 
    var block = this._image = L.DomUtil.create('div', 'leaflet-image-layer' + 
               (this._zoomAnimated ? ' leaflet-zoom-animated' : '')); 

    if (this.options.className) { L.DomUtil.addClass(block, this.options.className); } 
    block.innerHTML = this.options.html; 
    } 
}); 


var blockOverlay = new L.HtmlBlockOverlay(bounds, { 
    html: 'Hello world!', 
    className: 'hello-world-box' 
}).addTo(map); 

ein working example See.

+0

Wow, ich bin sehr beeindruckt, wie einfach es ist. Vielen Dank! – User

+0

Eine Frage: Wie kann ich jquery auf dem erstellten Element binden? '$ ('. Hallo-world-box'). On ('klick', funktion() { console.log ('hallo'); });' funktioniert nicht. – User

+0

Stellen Sie sicher, dass sich das Zeug im DOM befindet, bevor Sie versuchen, Ereignisse an das DOM anzuhängen. – IvanSanchez