跳到主要内容

图层进入和离开事件

共同脚本和独立 SDK 使用 MapLibre 风格的 map.on('mouseenter', 'trees', listener) 和 map.on('mouseleave', 'trees', listener)。图层界面与提示框由用户自行编写。

const entered = map.on('mouseenter', 'trees', event => {
  console.log(event.features[0].properties);
});
const left = map.on('mouseleave', 'trees', () => {
  console.log('已离开图层');
});
// 删除提示框时同步清理订阅。
entered.unsubscribe();
left.unsubscribe();

每个监听保存自己的状态。第一个有效的 mouse/pen 移动命中指定图层时进入,在图层范围内继续移动不会重复进入;移到没有命中的位置或离开地图时离开一次。touch 不生成图层悬停。多个 ID 按联合范围判断,once 等待第一次符合条件的转换,off 与重复监听沿用统一行为。

进入事件只包含选中图层的可见要素,离开事件的 features 为空。数据深度冻结,保留输入时的相机、图源、图层与要素身份。取消、停止、重跑与地图销毁清理状态。图层删除/隐藏本身不伪造物理输入,下一次有效输入才判断离开;监听继续跟随重建的同名 ID。

不带图层选择器的 mouseenter/mouseleave 表示地图边界通知。低层 PointerInput 的 mouseleave 允许有限的视口外坐标,返回 lngLat:null、features:;其它输入仍要求逻辑像素坐标位于视口内。不存在的显式 layers 查询仍拒绝 NOT_FOUND。

SDK 的32项异步回调预算先检查后更新悬停状态,拒绝的输入不使状态假装已转换。回调失败沿用SDK日志/共同脚本结束策略。以实际查询支持为准,当前共同 GeoJSON circle/line/fill 的二维与球面可用;任意3D遮挡和移动应用输入仍待接通。本机共享脚本18项已通过动态库、桌面和浏览器两后端验证,当前页面不代表正式发行。

参考名称:MapLibre on/off/once。

按住鼠标拖出地图时,SDK按视口边界退出悬停,释放后不重复离开;不会因浏览器的指针捕获而等到释放才退出。