Leaflet: simple plugin: leaflet 1.0.0 b2
by Leo
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.0.0-beta.2/leaflet-src.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.0.0-beta.2/leaflet.css">
<body>
<button type="btn1" id="addListenerButton">Add listener</button>
<button type="btn2" id="removeListenerButton">Remove listener</button>
<div id="mapWrapper">
<div id="map" ></div>
</div>
</body>
CSS
html, body, #map {
margin: 0;
width: 600px;
height: 500px;
}
#mapWrapper
{
padding: 10px;
margin: 10px;
width: 100%;
height: 100%;
}
JavaScript
//////////////////////// BEGIN PLUGIN //////////////////////////
L.Marker.addInitHook(function ()
{
function polygonContains(point, vs) {
var x = point[0], y = point[1];
var inside = false;
for (var i = 0, j = vs.length - 1; i < vs.length; j = i++) {
var xi = vs[i][0], yi = vs[i][1];
var xj = vs[j][0], yj = vs[j][1];
var intersect = ((yi > y) != (yj > y))
&& (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
if (intersect) inside = !inside;
}
return inside;
}
function prepareShapeCoordinates(cs) {
var shapeCoordinates = [];
if (typeof cs[0] === "number") {
if (cs.length % 2 != 0) {
throw new Error("Length of passed coordinates array should be even");
}
for (var i = 0; i < cs.length / 2; i++) {
shapeCoordinates[i] = [cs[2 * i], cs[2 * i + 1]];
}
}
else {
shapeCoordinates = cs;
}
return shapeCoordinates;
}
if (!this.options.shapeCoordinates) {
return;
}
var preparedShapeCoordinates = prepareShapeCoordinates(this.options.shapeCoordinates);
var options = this.options;
options.shapeCoordinates = preparedShapeCoordinates;
var thisMarker = this;
//wrap listener
function createListenerWrapper(listener) {
return function (event) {
var marker = (event.target);
var shapeCoordinates = marker.options.shapeCoordinates;
var originalEvent = event.originalEvent;
var offsetX = originalEvent.offsetX;
var offsetY = originalEvent.offsetY;
debugger;
if (!polygonContains([offsetX, offsetY], shapeCoordinates)) {
return;
}
listener(event);
};
}
var delegatingOnFunction =...