弹窗管理
弹窗是地图上的信息窗口,用于显示点位的详细信息或交互内容。
addPopup
添加弹窗到地图。
javascript
/**
* 添加弹窗
* @param {string} key - 唯一标识
* @param {thmap.PopupOptions} options - 弹窗配置
* @returns {ThMap} - 返回 this 以支持链式调用
*/
addPopup(key, options = {})参数说明
| 参数 | 类型 | 描述 |
|---|---|---|
| key | string | 弹窗的唯一标识,用于后续操作该弹窗 |
| options | thmap.PopupOptions | 弹窗的配置选项 |
PopupOptions 详细配置
| 选项 | 类型 | 默认值 | 必填 | 描述 |
|---|---|---|---|---|
| coordinate | [number, number] | 是 | 弹窗坐标 [经度, 纬度] | |
| addMap | boolean | false | 否 | 是否添加进地图 |
| domContent | Node | 否 | DOM结构内容 | |
| html | string | 否 | 富文本 | |
| text | string | 否 | 文本内容 | |
| show | boolean | false | 否 | 显示隐藏弹窗 |
| pointerEvents | boolean | true | 否 | 弹窗响应鼠标事件 |
| altitude | number | 否 | 海拔 | |
| closeButton | boolean | true | 否 | 弹窗关闭按钮 |
| closeOnClick | boolean | true | 否 | 弹窗点击地图关闭 |
| closeOnMove | boolean | false | 否 | 弹窗移动地图关闭 |
| focusAfterOpen | boolean | true | 否 | 弹窗打开时是否聚焦 |
| anchor | string | 否 | 弹窗锚点 | |
| className | string | 否 | 弹窗样式类名 | |
| offset | [number, number] | 否 | 弹窗偏移量 | |
| maxWidth | string | '300px' | 否 | 弹窗最大宽度 |
示例
javascript
// 添加简单弹窗
map.addPopup('info-popup', {
html: '<div style="padding: 10px;">这是一个弹窗</div>',
coordinate: [116.397228, 39.907556],
offset: [0, -10],
addMap: true,
show: true
})
// 添加带样式的弹窗
map.addPopup('styled-popup', {
html: '<div class="custom-popup">详细信息:<br>这里是自定义内容</div>',
coordinate: [116.4, 39.9],
maxWidth: '400px',
className: 'my-popup-class',
closeButton: false,
addMap: true
})getPopup
获取指定的弹窗实例。
javascript
/**
* 获取弹窗
* @param {string} key - 唯一标识
* @returns {PopupOverlay} - 弹窗实例
*/
getPopup(key)参数说明
| 参数 | 类型 | 描述 |
|---|---|---|
| key | string | 弹窗的唯一标识 |
示例
javascript
const popup = map.getPopup('info-popup')
// 更新弹窗内容
popup.setContent('<div>更新后的内容</div>')removePopup
移除弹窗。
javascript
/**
* 移除弹窗
* @param {string} [key] - 唯一标识,不提供则移除所有弹窗
* @returns {ThMap} - 返回 this 以支持链式调用
*/
removePopup(key)参数说明
| 参数 | 类型 | 描述 |
|---|---|---|
| key | string | 可选,弹窗的唯一标识,不提供则移除所有弹窗 |
示例
javascript
// 移除特定弹窗
map.removePopup('info-popup')
// 移除所有弹窗
map.removePopup()setPopupVisibility
设置弹窗的可见性。
javascript
/**
* 设置弹窗可见性
* @param {layer.VisibilityEnum} visibility - 可见性状态 ('visible' 或 'none')
* @param {string} [key] - 唯一标识,不提供则设置所有弹窗
* @returns {ThMap} - 返回 this 以支持链式调用
*/
setPopupVisibility(visibility, key)参数说明
| 参数 | 类型 | 描述 |
|---|---|---|
| visibility | 'visible' | 'none' | 可见性状态 |
| key | string | 可选,弹窗的唯一标识,不提供则设置所有弹窗 |
示例
javascript
// 显示特定弹窗
map.setPopupVisibility('visible', 'info-popup')
// 隐藏特定弹窗
map.setPopupVisibility('none', 'info-popup')
// 显示所有弹窗
map.setPopupVisibility('visible')弹窗操作示例
javascript
// 添加弹窗
map.addPopup('point-info', {
html: '<div>点击标记显示详情</div>',
coordinate: [116.397228, 39.907556],
show: false,
addMap: true
})
// 添加标记
map.addMarker('point-marker', {
coordinate: [116.397228, 39.907556],
addMap: true
})
// 点击标记显示弹窗
const marker = map.getMarker('point-marker')
marker.on('click', () => {
map.setPopupVisibility('visible', 'point-info')
})
// 点击地图其他位置关闭弹窗
map.instance.on('click', (e) => {
// 检查点击位置是否是标记
const features = map.instance.queryRenderedFeatures(e.point, {
layers: ['marker-layer']
})
if (features.length === 0) {
map.setPopupVisibility('none', 'point-info')
}
})常见问题
弹窗不显示:检查弹窗是否设置了 position,确保坐标在地图可视范围内。
弹窗样式问题:使用 className 参数自定义样式,或检查全局 CSS 是否影响弹窗样式。
弹窗关闭问题:确保 closeButton 和 closeOnClick 参数设置正确。
弹窗内容更新:使用 getPopup 获取实例后,调用 setContent 方法更新内容。