हाँ, आसान बटन एक अच्छा विचार है। मैंने अभी हाल ही में इस पर दोबारा गौर किया, और मैंने इस आवश्यकता मॉड्यूल (एएमडी) को बनाया, जो प्लेसमेंट को व्यवस्थित करने देता है (न केवल कोने में, बल्कि एक सटीक स्थान पर) और यह 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;
});