【发布时间】:2015-10-12 10:02:03
【问题描述】:
我使用heatmap.js 在leaflet.js 上绘制热图。我能够精美地渲染它。但是,假设初始窗口/div 大小为 400x400。然后我调整窗口大小,div 变为 600x600,热图图层的大小仍为 400x400 并被截断。移动地图时,您可以看到热图的 400x400 切割区域。
是否要调整大小或重置大小?
【问题讨论】:
标签: javascript leaflet mapbox heatmap
我使用heatmap.js 在leaflet.js 上绘制热图。我能够精美地渲染它。但是,假设初始窗口/div 大小为 400x400。然后我调整窗口大小,div 变为 600x600,热图图层的大小仍为 400x400 并被截断。移动地图时,您可以看到热图的 400x400 切割区域。
是否要调整大小或重置大小?
【问题讨论】:
标签: javascript leaflet mapbox heatmap
您可以收听L.Map 实例的resize 事件:
调整地图大小时触发。
http://leafletjs.com/reference.html#map-resize
然后使用L.Map实例的invalideSize方法:
检查地图容器大小是否发生变化,如果发生变化,则更新地图 - 在您动态更改地图大小后调用它,
http://leafletjs.com/reference.html#map-invalidatesize
map.on('resize', function () {
map.invalidateSize();
});
【讨论】:
invalidateSize 来做到这一点,就像我在代码示例中所做的那样。如果您遇到问题,请发布您自己的问题,因为这绝对不是 cmets 的用途。
在我看来,这是传单 0.7.x 中的一个错误,它发生在包含地图的 div 的某些 CSS 设置下。我通过修改leaflet-heatmap.js 中的以下函数解决了这个问题:
_resetOrigin: function () {
this._origin = this._map.layerPointToLatLng(new L.Point(0, 0));
var size = this._map.getSize();
if (this._width !== size.x || this._height !== size.y) {
this._width = size.x;
this._height = size.y;
this._el.style.width = this._width + 'px';
this._el.style.height = this._height + 'px';
this._heatmap._renderer.setDimensions(this._width, this._height); // <- added this line
}
this._draw();
}
【讨论】: