在信息气泡和标记外单击时如何关闭信息气泡 - HERE 地图 API
How to close an info bubble when there is a click outside the info bubble and marker - HERE maps API
我一直试图在仅单击地图时关闭信息气泡,但无法实现。
我试过以下方法
this.map.addEventListener("tap", this.handleMapClick);
private handleMapClick(evt: Event) {
this.clearOpenInformationBubble();
}
但是,即使单击地图对象也会触发点击事件,这意味着当我单击标记时信息气泡保持关闭状态。
我也试过给气泡元素添加一个 'blur' 事件侦听器,但这似乎不起作用
const bubble = new H.ui.InfoBubble(evt.target.getGeometry(), {
content: ...
});
this.ui.addBubble(bubble);
bubble.getElement().focus()
bubble.getElement().addEventListener('blur', evt => {
this.clearOpenInformationBubble();
})
我想知道是否有一种方法可以侦听仅由点击地图触发的事件。
Google 地图中有一个类似的实现。
google.maps.event.addDomListener(map, "click", function() {
alert('Map clicked')
});
我想我会尝试回答 。在这个答案中,他们想先关闭任何其他打开的 infobubbles
。我相信,如果您删除组中的事件侦听器,将其保留在您的地图上,并始终删除打开的 infobubbles
,您会很好。 然后添加逻辑,查看事件目标值是否有数据,并显示一个infobubble
.
这假设您infobubbles
基于具有与之关联的数据对象的标记。
编辑:
我能够让它工作 - 再次假设您的用例是 infobubbles
.
的标记
map.addEventListener('tap', evt => {
ui.getBubbles().forEach(bub => ui.removeBubble(bub));
if(!evt.target.getData) return;
// for all objects that it contains
var bubble = new H.ui.InfoBubble(evt.target.getGeometry(), {
// read custom data
content: evt.target.getData()
});
// show info bubble
ui.addBubble(bubble);
});
您可以在回调函数中查看事件目标。
如果是地图,那么只有你关闭信息气泡:
this.map.addEventListener("tap", this.handleMapClick);
private handleMapClick(evt: Event) {
if (evt.target === this.map) {
this.clearOpenInformationBubble();
}
}
```
我一直试图在仅单击地图时关闭信息气泡,但无法实现。
我试过以下方法
this.map.addEventListener("tap", this.handleMapClick);
private handleMapClick(evt: Event) {
this.clearOpenInformationBubble();
}
但是,即使单击地图对象也会触发点击事件,这意味着当我单击标记时信息气泡保持关闭状态。
我也试过给气泡元素添加一个 'blur' 事件侦听器,但这似乎不起作用
const bubble = new H.ui.InfoBubble(evt.target.getGeometry(), {
content: ...
});
this.ui.addBubble(bubble);
bubble.getElement().focus()
bubble.getElement().addEventListener('blur', evt => {
this.clearOpenInformationBubble();
})
我想知道是否有一种方法可以侦听仅由点击地图触发的事件。
Google 地图中有一个类似的实现。
google.maps.event.addDomListener(map, "click", function() {
alert('Map clicked')
});
我想我会尝试回答 infobubbles
。我相信,如果您删除组中的事件侦听器,将其保留在您的地图上,并始终删除打开的 infobubbles
,您会很好。 然后添加逻辑,查看事件目标值是否有数据,并显示一个infobubble
.
这假设您infobubbles
基于具有与之关联的数据对象的标记。
编辑:
我能够让它工作 - 再次假设您的用例是 infobubbles
.
map.addEventListener('tap', evt => {
ui.getBubbles().forEach(bub => ui.removeBubble(bub));
if(!evt.target.getData) return;
// for all objects that it contains
var bubble = new H.ui.InfoBubble(evt.target.getGeometry(), {
// read custom data
content: evt.target.getData()
});
// show info bubble
ui.addBubble(bubble);
});
您可以在回调函数中查看事件目标。
如果是地图,那么只有你关闭信息气泡:
this.map.addEventListener("tap", this.handleMapClick);
private handleMapClick(evt: Event) {
if (evt.target === this.map) {
this.clearOpenInformationBubble();
}
}
```