bug来源及解决
使用百度地图测距控件时,引入如下版本:1
<script type="text/javascript" src="https://api.map.baidu.com/library/DistanceTool/1.2/src/DistanceTool_min.js"></script>
但存在如下问题:
- 系统首次加载地图实例,测距控件使用正常。
- 关闭该地图,切换另一个地图,或者重新打开该地图,都无法使用测距控件。
- 已经保证每次打开的是一个完全崭新的地图实例(完全重新初始化)
经过源代码调试,发现是该DistanceTool文件,将测距工具的配置属性OperationMask,设置成挂靠window而非map实例的全局变量。导致就算map实例被销毁,属性配置依然被保留。
而本bug产生真实原因如下:
- 测距工具创建后,会根据当前map实例所在的dom,产生一个dom遮罩层_maskElement(z-index=1000)
- 测距工具利用遮罩层_maskElement监听地图取点事件(单击、双击等)
- 但window下的全局变量OperationMask的._maskElement属性,却保留旧有map实例产生的DOM值,导致新建map后,无法获取最新的DOM监听测控工具点击事件。
- 因此测距工具失效。
解决方法:
可OperationMask设置为挂靠map实例。
可OperationMask._maskElement及时清理(设置为null)。
源代码
引入DistanceTool
1 | // 初始化测距方法 |
改造后的DistanceTool.js文件
1 | /** |