L.Evented.addInitHook( function () { this._singleClickTimeout = null; this.on( 'click', this._scheduleSingleClick, this ); this.on( 'dbclick dragstart zoomstart', this._cancelSingleClick, this ); }); L.Evented.include({ _cancelSingleClick : function(){ // This timeout is key to workaround an issue where double-click events // are fired in this order on some touch browsers: ['click', 'dblclick', 'click'] // instead of ['click', 'click', 'dblclick'] setTimeout( this._clearSingleClickTimeout.bind(this), 0 ); }, _scheduleSingleClick: function(e) { this._clearSingleClickTimeout(); this._singleClickTimeout = setTimeout( this._fireSingleClick.bind(this, e), (this.options.singleClickTimeout || 500) ); }, _fireSingleClick: function(e){ if ( !e.originalEvent._stopped ) { this.fire( 'singleclick', L.Util.extend( e, { type : 'singleclick' } ) ); } }, _clearSingleClickTimeout: function(){ if (this._singleClickTimeout != null) { clearTimeout( this._singleClickTimeout ); this._singleClickTimeout = null; } } });