Skip to content

Commit a9772e6

Browse files
committed
fix: onMouseEnter & onMouseLeave trigger between joined layers (#1671)
1 parent 109c334 commit a9772e6

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

src/mapbox/mapbox.ts

+12-7
Original file line numberDiff line numberDiff line change
@@ -793,27 +793,32 @@ export default class Mapbox {
793793

794794
if (shouldTrackHoveredFeatures) {
795795
const eventType = e.type;
796-
const wasHovering = this._hoveredFeatures?.length > 0;
796+
const hoveredFeaturesLen = this._hoveredFeatures?.length || 0;
797797
let features;
798798
if (eventType === 'mousemove') {
799799
try {
800-
features = this._map.queryRenderedFeatures(e.point, {
801-
layers: props.interactiveLayerIds
802-
});
800+
features = this._map
801+
.queryRenderedFeatures(e.point, {
802+
layers: props.interactiveLayerIds
803+
})
804+
.filter(
805+
(feature, index, array) =>
806+
array.findIndex(f => f.layer.id === feature.layer.id) === index
807+
);
803808
} catch {
804809
features = [];
805810
}
806811
} else {
807812
features = [];
808813
}
809-
const isHovering = features.length > 0;
814+
const hoveringFeatureLen = features.length;
810815

811-
if (!isHovering && wasHovering) {
816+
if (hoveringFeatureLen < hoveredFeaturesLen) {
812817
e.type = 'mouseleave';
813818
this._onPointerEvent(e);
814819
}
815820
this._hoveredFeatures = features;
816-
if (isHovering && !wasHovering) {
821+
if (hoveringFeatureLen > hoveredFeaturesLen) {
817822
e.type = 'mouseenter';
818823
this._onPointerEvent(e);
819824
}

0 commit comments

Comments
 (0)