使用Leaflet检测用户何时达到maxBounds

时间:2017-04-18 10:15:08

标签: javascript leaflet

我正在使用传单向我们的用户显示交互式地图。 我们想让他们浏览一个有限的区域,告诉他们他们必须订阅,以防他们想要看到太远的东西(使用弹出窗口或等效的东西)。

到目前为止,我已经看到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事件并检查该中心是否超出我的界限。 但是,对于传单已经在做什么,这似乎是多余的。

有没有更好的利用传单来实现这一目标?

由于

1 个答案:

答案 0 :(得分:1)

检查您定义的边界是否包含地图边界。只要地图边界在定义的边界内,这将无效:

var myBounds = L.latLngBounds(...)

map.on('move moveend zoomend', function(){
    if (!myBounds.contains(map.getBounds())) {
        // Display popup or whatever
    }
});
  

似乎这对于传单已经在做什么是多余的。

不要担心。对于这个用例,开销可以忽略不计。