ใช่ปุ่มง่าย ๆ ก็เป็นความคิดที่ดีเช่นกัน ฉันเพิ่งกลับมาใหม่เมื่อไม่นานมานี้และฉันได้สร้างโมดูล 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;
});