L.FollowControl = L.Control.extend({ options: { getPosition: function() { return L.latLng(53.5,10); }, element: 'div', cssClass: '', innerHTML: '', initialFollow: true, followUpdateInterval: 100, noFollowUpdateInterval: 1000, }, initialize: function(options) { L.Control.prototype.initialize.call(this,options); L.Util.setOptions(this,options); }, onAdd: function(map) { this._map = map; this._div = L.DomUtil.create(this.options.element, this.options.cssClass ); this._div.innerHTML = this.options.innerHTML; this._doFollow = this.options.initialFollow; var that = this; this._div.onclick = function() { that.setFollow(true); return true; }; this.update(); return this._div; }, onRemove: function(map) { this._map = null; }, setFollow: function( v ) { this._doFollow = v; }, update: function() { if( this._map && this._doFollow ) { this._map.setView( this.options.getPosition() ); var that = this; setTimeout( function() { that.update(); }, this.options.noFollowUpdateInterval ); } else { var that = this; setTimeout( function() { that.update(); }, this.options.followUpdateInterval ); } }, _map: null, _doFollow: true, }); L.followControl = function( options ) { return new L.FollowControl( options ); }