1

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

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

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

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

集中输入表单后。西南与东北相同!

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

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

4

1 回答 1

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. 调查输入焦点触发窗口大小调整的原因

于 2013-11-01T09:02:50.617 回答