【问题标题】:How to keep old tiles until each new tile is loaded when redrawing a layer in Leaflet?在 Leaflet 中重绘图层时,如何保留旧瓷砖直到加载每个新瓷砖?
【发布时间】:2014-08-05 13:00:58
【问题描述】:

我正在使用组合的切片图层,每次添加新图层或删除旧图层时,我都必须刷新(当前使用.redraw())。我的实现没有任何技术问题,但是当切换图层时,会出现短暂的闪烁,因为旧图块会立即被移除,但新图块显然需要一些时间才能加载。

有什么方法可以保留这些旧图块,直到其替换已加载,从而实现更平滑的过渡?

我考虑过使用临时图层,并将新图块加载到旧图块之上,但这会导致大量额外的工作和加载,所以我希望传单内置了更优雅的东西,比如 delayRemoval 选项什么的。


这是一个 jsfiddle:http://jsfiddle.net/Q6586/

如果您点击地图,它会重新绘制自己,立即移除旧图块,并且地图会在加载新图块之前短暂闪烁灰色。

我想摆脱那个闪光。我通过在旧层之上创建一个新层暂时解决了这个问题,但我觉得这是一个非常不雅的解决方案。

【问题讨论】:

  • 你可以分享一个 JSFiddle 来说明你的观点
  • 已添加 Jsfiddle。点击地图查看我说的(丑陋的)闪光灯。

标签: leaflet redraw


【解决方案1】:

您可以创建另一个图层,在重绘时将其置于前面。

“加载”事件会告诉您所有图块何时加载

map.on('click', function(e) {
    layer2.bringToFront();
    layer.on('load', function(e) {
        console.log('loaded');
        layer.bringToFront();
    });
    layer.redraw();
});

看看这个 JSFiddle:http://jsfiddle.net/FranceImage/5452r/

我调用不同的图块,以便您可以看到。显然,您将对两个切片图层使用相同的模板。

【讨论】:

  • 这仍然是防止闪烁的最佳做法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-28
相关资源
最近更新 更多