“map.getBounds()”结果在传单.js集中输入表单后更改

The "map.getBounds()" result changed after focused input form in leaflet.js

本文关键字:输入 集中 js 表单 getBounds map 结果      更新时间:2023-09-26

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

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

例如。在改变之前。西南是明显的东北形式。

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

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

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

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

以下是我假设发生的事情:

  1. 聚焦输入字段
  2. 输入字段上的样式以某种方式触发 Windows.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. 调查输入焦点触发窗口大小调整的原因