Vâng, nút dễ dàng cũng là một ý tưởng tốt. Tôi đã xem lại điều này gần đây và tôi đã tạo mô-đun RequireJS (AMD) này cho phép tham số hóa vị trí (không chỉ ở góc, mà đến một vị trí chính xác) và cũng lấy nội dung HTML từ tài liệu HTML, sau đó trích xuất nội dung HTML của DOM và đặt nó vào điều khiển. Bạn có thể đơn giản hóa điều này nếu bạn muốn.
để gọi thực thi một cái gì đó như thế này và nó sẽ tạo ra một thể hiện mới:
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;
});