缩小太多时,不会触发Leaflet JS zoomend事件

时间:2019-06-25 12:46:53

标签: leaflet

我以15的缩放级别初始化地图:

map.setView(latlng, 15)

稍后,当用户与触发该功能的按钮交互时:

const zoomInAndTrigger = () => {
  map.setView(latlng, 18)

  map.once("zoomend", () => {
    // some triggers fired
  })
}

zoomInAndTrigger() // on button click

这很好用。 好吧,除非用户在触发15之前将地图缩小到超过初始zoomInAndTrigger缩放级别,否则根本不会触发'zoomend'

我不知道为什么。

2 个答案:

答案 0 :(得分:1)

从级别进行缩放时,例如14至18时,默认情况下不会播放缩放动画-地图的zoomAnimationThreshold的默认值为4,而quoting from the Leaflet reference的默认值为:

  

如果缩放差异超过此值,则不会设置缩放动画。

然后在您的map.once("zoomend", ...行执行之前,立即执行整个缩放交互。

根据经验,您应该始终在运行触发该事件的代码之前 附加事件处理程序,无论您是否仅观察到该事件发生了一段时间后。它将使您免受race conditions的伤害。

另一方面,您可以将一组zoom/pan options传递给setZoom调用; animate zoom option可以为任何给定的缩放操作强制启用或禁用缩放动画。

答案 1 :(得分:0)

您可能只需要在执行地图setView之前附加“ zoomend”事件监听器

默认情况下,当缩放级别的间隙太大或新位置太远时,Leaflet setView将立即重置视图,而不是对视图更改进行动画处理。然后,在视图已更改后 附加您的侦听器,并且不会触发该视图。