MapBox Markerにclickイベント

GoogleMapでは、Markerにclickイベントを定義するときは、

const marker = new google.maps.Marker({
	position: marker_loc,
	map: gmap,
	title: '赤ピン'
});
//マーカークリックでclickEventを実行
google.maps.event.addListener(marker, 'click', clickEvent);

でできるけど、MapBoxでは、

const marker = new mapboxgl.Marker({
	color: '#ff0000'
	})
	.setLngLat(marker_loc)
	.addTo(gmap);
//マーカークリックでclickEventを実行
marker.on('click', clickEvent);

では、動かん!!!

MapBoxのDocumentをよく読むと、MarkerのEventsは、「drag」「dragstart」「dragend」の3つしかないことがわかった。

Markerのソースコードを確認したところ、「click」は、MarkerのPopup機能に使われているため、それ以外では使えなくなっていることがわかった。(以下のリンクの399行目からの_onMapClick)

そこで、Markerクラスをオーバーライドして、_onMapClickを書き換えることとした。

class customMarker extends mapboxgl.Marker{
    _onMapClick(e) {
        const targetElement = e.originalEvent.target;
        const element = this._element;

        if (targetElement === element || element.contains((targetElement))) {
            clickEvent();
        }
    }
}

const marker = new customMarker({
	color: '#ff0000'
	})
	.setLngLat(marker_loc)
	.addTo(gmap);

で、MapBoxのMarkerに、clickイベントを実行できるようにできた。