【问题标题】:The "map.getBounds()" result changed after focused input form in leaflet.js“map.getBounds()”结果在leaflet.js中聚焦输入表单后发生了变化
【发布时间】:2013-10-30 12:28:48
【问题描述】:

我使用leafletjs 和jQueryMobile 开发了一个基于Phonegap 的地图Android 应用程序。 此应用程序有两个页面。第 1 页是 Mapview,第 2 页是由一些输入表单组成的首选项。

当我将输入表单(只是!)聚焦在第二页并转移到第一页时,地图边界由于某种原因发生了变化。

EG。 改变之前。西南与东北截然不同。

L.map.getBounds().toBBoxString();  // 135.42702913284302,34.68926290260606,135.42702913284302,34.68926290260606

焦点输入表单后。西南与东北相同!

L.map.getBounds().toBBoxString();  // 135.42702913284302,34.68926290260606,135.4544949531555,34.70252981597828

其他人有同样的问题吗? 我找不到设置地图边界的方法。

【问题讨论】:

    标签: javascript android jquery-mobile cordova leaflet


    【解决方案1】:

    这是我假设发生的情况:

    1. 您关注输入字段
    2. 输入字段的样式以某种方式触发了 window.resize 事件
    3. 传单地图大小无效
    4. 当您请求边界时,它会读取新的大小(因为旧的已失效),因为地图被隐藏,所以它为零 - 大概

    那是因为getBounds调用:

    getPixelBounds: function () {
        var topLeftPoint = this._getTopLeftPoint();
        return new L.Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));
    },
    

    topLeftPoint 完好无损,但大小为 [0,0],您得到 NE = SW。

    可能的解决方案:

    A.在转换到第二页之前缓存边界 B. 调查输入焦点为何会触发窗口大小调整

    【讨论】:

      猜你喜欢
      • 2014-10-15
      • 2018-06-03
      • 2017-11-21
      • 2012-12-16
      • 1970-01-01
      • 2023-03-13
      • 2012-04-23
      • 2017-12-27
      相关资源
      最近更新 更多