Table of Contents
infoBox
当infoWindow
无法满足需求的时候,可以使用infoBox
代替。
首先,引入插件:
// 延迟是为了保证百度地图先加载完毕,然后再加载插件。 componentDidMount() { // 加载 Infobox let el = document.createElement('script') el.src = './resources/js/InfoBox_min.js' setTimeout(() => { document.body.appendChild(el) }, 1000) }
InfoBox_min.js 文件可以尝试从百度地图开发文档里找到,不过比较难找。
然后,生成信息弹窗:
// 构造信息窗口 generateInfoBox(id) { const { dispatch } = this.props const { infoBox } = this.props[namespace] if (this.map && window.BMapLib && window.BMapLib.InfoBox) { this.infoBox = new window.BMapLib.InfoBox( this.map.state.gis, `<div id='box_${id}'></div>`, { boxStyle: { width: '400px', height: 'auto' }, closeIconUrl: 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==', offset: new BMap.Size(0, 80) } ) this.infoBox.enableAutoPan() setTimeout(() => { ReactDOM.render( <InfoBox {...infoBox} />, document.getElementById(`box_${id}`) ) }, 100) } }
因为我不需要关闭图标,所以,这里用了一个1px*1px
的透明图片占位。此外,offset
生效的前提是boxStyle
里设置了width
和height
。(吐血了)
地点会出现弹窗
在使用 echart 结合百度地图的时候出现了奇怪的情况:某些浏览器版本下百度地图上面的地点可以点击,随后会出现弹窗。
根据网友的文章,添加了配置项:
bmap: { // …… enableMapClick: false, },