Layer add/removeInteractiveTarget methods

registers DOM elements for event delegation
This commit is contained in:
Vladimir Agafonkin 2014-11-17 14:39:47 +02:00
parent 4c8ffadf30
commit b149f2d754
2 changed files with 16 additions and 2 deletions

View File

@ -25,6 +25,16 @@ L.Layer = L.Evented.extend({
return this._map.getPane(name ? (this.options[name] || name) : this.options.pane);
},
addInteractiveTarget: function (targetEl) {
this._map._targets[L.stamp(targetEl)] = this;
return this;
},
removeInteractiveTarget: function (targetEl) {
delete this._map._targets[L.stamp(targetEl)];
return this;
},
_layerAdd: function (e) {
var map = e.target;

View File

@ -557,6 +557,8 @@ L.Map = L.Evented.extend({
'click dblclick mousedown mouseup mouseenter mouseleave mousemove contextmenu',
this._handleMouseEvent, this);
this._targets = {};
if (this.options.trackResize) {
L.DomEvent[onOff](window, 'resize', this._onResize, this);
}
@ -571,9 +573,11 @@ L.Map = L.Evented.extend({
_handleMouseEvent: function (e) {
if (!this._loaded) { return; }
this._fireMouseEvent(this, e,
var target = this._targets[L.stamp(e.target || e.srcElement)];
this._fireMouseEvent(target || this, e,
e.type === 'mouseenter' ? 'mouseover' :
e.type === 'mouseleave' ? 'mouseout' : e.type);
e.type === 'mouseleave' ? 'mouseout' : e.type, true);
},
_fireMouseEvent: function (obj, e, type, propagate, latlng) {