リーフレットのカスタムコントロールを作成するのにいくつかの助けがありますが、リーフレットの最新バージョンで使用されているCSSスタイルへのアップグレードにまだ問題があります。基本的に、必要なのは、ドロップダウンシャドウが周囲にある白いボックス内のアイコンだけです。
ここに私がこれまで取り組んできたものがあります。見て、気軽にフォークしてください:
リーフレットのカスタムコントロールを作成するのにいくつかの助けがありますが、リーフレットの最新バージョンで使用されているCSSスタイルへのアップグレードにまだ問題があります。基本的に、必要なのは、ドロップダウンシャドウが周囲にある白いボックス内のアイコンだけです。
ここに私がこれまで取り組んできたものがあります。見て、気軽にフォークしてください:
回答:
とった。
CodePenデモのデモを見るには:http ://codepen.io/DrYSG/pen/zJsiG
関連する作業を行うJSとCSSスニペットは次のとおりです。
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);
};
および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の答えに似ていますが、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);
はい、簡単なボタンも良いアイデアです。私は最近これを再訪し、配置をパラメータ化できるようにする(コーナーだけでなく正確な場所に)このRequireJSモジュール(AMD)を作成し、HTMLドキュメントからHTMLコンテンツをフェッチし、それをリッピングしますDOMのコントロールに配置します。必要に応じてこれを簡素化できます。
呼び出すには、次のようなものを実行すると、新しいインスタンスが作成されます。
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;
});
Leaflet.EasyButtonは上記のように見えますが、ここにいくつかのサンプルコードがあります。
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);
といくつかのCSS:
.button-image{
display: block;
height: auto;
margin: auto;
max-width: 100%;
}
さらに多くを探しているなら、たくさんのデモ。