我正在使用传单向我们的用户显示交互式地图。 我们想让他们浏览一个有限的区域,告诉他们他们必须订阅,以防他们想要看到太远的东西(使用弹出窗口或等效的东西)。
到目前为止,我已经看到Leaflet支持 maxBounds 选项。 这是一个很好的开始,可以让我阻止用户看到更大的区域。
现在我希望能够检测到一个maxBounds'事件'向用户显示弹出窗口。
我一直在研究Leaflet的源代码,但是找不到明显的方法。
到目前为止,我发现maxBounds选项已输入 setView 方法。 此方法本身使用 _limitCenter 方法来定义中心。 这会更深入一些,直到最终使用边界的 _getBoundsOffset 方法。
_getBoundsOffset: function (pxBounds, maxBounds, zoom) {
var projectedMaxBounds = toBounds(
this.project(maxBounds.getNorthEast(), zoom),
this.project(maxBounds.getSouthWest(), zoom)
),
minOffset = projectedMaxBounds.min.subtract(pxBounds.min),
maxOffset = projectedMaxBounds.max.subtract(pxBounds.max),
dx = this._rebound(minOffset.x, -maxOffset.x),
dy = this._rebound(minOffset.y, -maxOffset.y);
return new Point(dx, dy);
},
到目前为止我能找到的最接近的是挂钩moveend事件并检查该中心是否超出我的界限。 但是,对于传单已经在做什么,这似乎是多余的。
有没有更好的利用传单来实现这一目标?
由于
答案 0 :(得分:1)
检查您定义的边界是否包含地图边界。只要地图边界在定义的边界内,这将无效:
var myBounds = L.latLngBounds(...)
map.on('move moveend zoomend', function(){
if (!myBounds.contains(map.getBounds())) {
// Display popup or whatever
}
});
似乎这对于传单已经在做什么是多余的。
不要担心。对于这个用例,开销可以忽略不计。