BR.OpacitySliderControl = L.Control.extend({ options: { position: 'topleft' }, onAdd: function(map) { var container = L.DomUtil.create('div', 'leaflet-bar control-slider'); // prevent also dragging map in Chrome L.DomEvent.disableClickPropagation(container); // migrate legacy value if (BR.Util.localStorageAvailable()) { var value = localStorage.getItem('opacitySliderValue'); if (value !== null) { localStorage.setItem( 'opacitySliderValue' + this.options.id, value ); localStorage.removeItem('opacitySliderValue'); } } var slider = new BR.OpacitySlider(this.options); container.appendChild(slider.getElement()); var stopClickAfterSlide = function(evt) { L.DomEvent.stop(evt); removeStopClickListeners(); }; var removeStopClickListeners = function() { document.removeEventListener('click', stopClickAfterSlide, true); document.removeEventListener( 'mousedown', removeStopClickListeners, true ); }; slider.input .on('slideStart', function(evt) { // dragging beyond slider control selects zoom control +/- text in Firefox L.DomUtil.disableTextSelection(); }) .on('slideStop', { self: this }, function(evt) { L.DomUtil.enableTextSelection(); // When dragging outside slider and over map, click event after mouseup // adds marker when active on Chromium. So disable click (not needed) // once after sliding. document.addEventListener('click', stopClickAfterSlide, true); // Firefox does not fire click event in this case, so make sure stop listener // is always removed on next mousedown. document.addEventListener( 'mousedown', removeStopClickListeners, true ); }); return container; } });