Mapbox custom control buttons
by amay077
HTML
<script src="https://api.mapbox.com/mapbox-gl-js/v1.6.1/mapbox-gl.js"></script>
<link rel="stylesheet" href="https://api.mapbox.com/mapbox-gl-js/v1.6.1/mapbox-gl.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<div id="map" style="position: absolute; top: 0; bottom: 0; width: 100%;"></div>
CSS
body { margin: 0; padding: 0; }
JavaScript
// Control implemented as ES6 class
class HelloWorldControl {
onAdd(map) {
this.map = map;
const homeButton = document.createElement('button');
homeButton.innerHTML = '<i class="fa fa-home" aria-hidden="true"></i>';
homeButton.addEventListener('click', (e) => {
alert('Home button click');
});
this.container = document.createElement('div');
this.container.className = 'mapboxgl-ctrl mapboxgl-ctrl-group';
this.container.appendChild(homeButton);
return this.container;
}
onRemove() {
this.container.parentNode.removeChild(this.container);
this.map = undefined;
}
}
const opt = {
container: 'map',
style: {
version: 8,
sources: {
OSM: {
type: "raster",
tiles: [
"https://a.tile.openstreetmap.org/{z}/{x}/{y}.png",
],
tileSize: 256,
attribution:
"OpenStreetMap",
},
},
layers: [{
id: "BASEMAP",
type: "raster",
source: "OSM",
minzoom: 0,
maxzoom: 18,
}],
},
};
opt.center = [138.73072, 35.36286];
opt.zoom = 13;
const map = new mapboxgl.Map(opt);
map.addControl(new mapboxgl.NavigationControl({
showCompass: false,
}));
map.addControl(new HelloWorldControl(), 'top-right');