如何解决如何以编程方式打开标记集群
我希望能够单击列表并使地图飞到标记的位置并打开其弹出窗口。只要标记具有相同的位置(不是蜘蛛网),我就可以这样做。我编写了一个脚本来查找包含标记的 markerCluster,但我无法触发它的 click 方法,以使标记可访问。
// if marker is not accessible
Object.values(mapRef.current._targets).forEach(_target => {
if (_target._markers) {
const wantedMarker = _target._markers.find(_marker => {
return (
_marker.options.id === someId
);
});
if (wantedMarker) {
_target.click() // _target.click() is not a function
解决方法
如果没有活的代码示例,我无法确认 wantedMarker
确实是您想要的标记的实例。但如果它,.click()
确实不是一个函数。但是,您可以获取标记的弹出窗口(如果有),并以编程方式打开它:
const popup = wantedMarker.getPopup();
if (popup){
popup.openOn(map) // you'll need a reference to the L.map instance for this
}
,
通过在所有父元素中查找“_icon”来解决它。被markerCluster 隐藏的元素没有这个属性。 _icon 元素有点击事件,所以我用它来打开标记集群。
const openMarkerClustersAndMarkerPopup = (allMarkersRef,markerId) => {
const markerElementRef = allMarkersRef.current[markerId];
if (markerElementRef._icon) {
markerElementRef._icon.click();
} else {
const clusters = [];
let _currentElement = markerElementRef;
while (_currentElement.__parent) {
clusters.push(_currentElement);
if (_currentElement._icon) {
break;
}
_currentElement = _currentElement.__parent;
}
// Trigger markercluster and marker by starting with top markercluster
for (let i = clusters.length - 1; i >= 0; i--) {
const _icon = clusters[i]._icon;
_icon && _icon.click();
}
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。