经纬志
首页 / Leaflet / 使用示例

自定义控件

继承 L.Control,做一个带城市跳转、缩放级别和鼠标坐标的右上角面板。

Leaflet 1.9.4 · 更新 2026-10-27
源码与运行效果
运行效果

说明

控件通过 L.Control.extend 定义,onAdd(map) 必须返回一个 DOM 节点, Leaflet 会把它放进对应角落的容器。示例在 onAdd 里创建按钮与读数, 在 onRemove 里解绑 zoomend 和 mousemove。

处理原因
disableClickPropagation点击按钮时不触发地图拖拽与地图 click
disableScrollPropagation在面板上滚轮不会缩放地图
requestAnimationFramemousemove 每帧多次,合并成一次 DOM 写入
map.off控件移除后仍持有地图引用会持续触发回调

坐标读数用 toFixed(5),约 1 米精度,足够交互展示。 城市跳转用 flyTo 的 duration 控制动画时长, 默认动画在长距离跳转时可能过快,显式给 1.2 秒观感更稳。

控件只负责展示与触发动作,不要把业务状态塞进控件实例。 需要多处共享的数据放在地图之外的模块里,控件只读取并渲染。