我以15的缩放级别初始化地图:
map.setView(latlng, 15)
稍后,当用户与触发该功能的按钮交互时:
const zoomInAndTrigger = () => {
map.setView(latlng, 18)
map.once("zoomend", () => {
// some triggers fired
})
}
zoomInAndTrigger() // on button click
这很好用。
好吧,除非用户在触发15
之前将地图缩小到超过初始zoomInAndTrigger
缩放级别,否则根本不会触发'zoomend'
。
我不知道为什么。
答案 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将立即重置视图,而不是对视图更改进行动画处理。然后,在视图已更改后 附加您的侦听器,并且不会触发该视图。