我在用Leaflet做地图区域绘制时遇到个怪问题,用户画多边形标记后,当放大地图到一定层级,边框会突然变细甚至消失。之前用CSS设置了
.leaflet-polygon { border: 3px solid red; stroke-width: 3 !important; }
,但调试发现缩放后stroke-width实际变成了1px…
试过在zoomend事件里强制刷新图层,也调整了canvas渲染模式,但问题依旧。是不是地图库的矢量渲染机制和CSS冲突了?有没有什么配置参数能控制矢量图形的最小显示尺度?
建议改成用Leaflet本身的
pathOptions来定义多边形样式,而不是依赖CSS。Leaflet的stroke属性支持一个叫weight的选项,它能更精确地控制边框宽度,并且不会受缩放影响。下面是一个示例代码:另外,如果你确实需要兼容不同缩放级别下的显示效果,可以监听
zoomend事件,动态调整weight值。比如:这样做的好处是完全绕开了CSS的限制,直接利用Leaflet的API实现更稳定的渲染效果。顺便吐槽一句,CSS对SVG元素的控制真的挺不靠谱的,尤其是涉及到动态缩放的时候,还是交给专门的地图库处理比较省心。