避免在d3.geo.tile中闪烁
Avoid flickering in d3.geo.tile
我正在实现一个基本的交互式地图,其中一些数据放在openstreetmap瓦片的顶部。该代码与经典的d3.geo.tile示例非常相似:http://bl.ocks.org/mbostock/5342063
除了一件事之外,一切似乎都很完美:瓷砖在缩放和平移过程中闪烁。这种效果在最初的例子和迄今为止我遇到的d3.geo.tile的所有其他用例中也可以观察到。出现这种用户体验错误是因为浏览器并不总是能够立即下载互动程序。令人惊讶的是,即使在加载了某个磁贴之后,它的重新出现也不能保证是即时的——闪烁确实会不时出现。
像Leaflet这样笨拙的地图库试图通过显示以前缩放级别的缓存瓦片来补偿闪烁,直到请求的瓦片准备好为止。在我看来,如果d3.geo.tile也能做一些类似的事情,那就太好了。
我尝试使用image.exit()
,因为在加载新的磁贴时,以前显示的磁贴可能会在屏幕上保留一段时间。但不幸的是,什么都没用。
有人能为这个问题提出一个解决方案吗?不会闪烁的平滑D3地图是2016年世界应得的!:–)
UPD
事实证明,使tile url不那么随机部分解决了问题(当重新访问某个视图时,闪烁更少):
// before
image.enter().append("image")
.attr("xlink:href", function(d) { return "http://" + ["a", "b", "c"][Math.random() * 3 | 0] + ".tile.openstreetmap.org/" + d[2] + "/" + d[0] + "/" + d[1] + ".png"; })
// after
image.enter().append("image")
.attr("xlink:href", function(d) { return "http://" + ["a", "b", "c"][ (d[0] + d[1] + d[2]) % 3 ] + ".tile.openstreetmap.org/" + d[2] + "/" + d[0] + "/" + d[1] + ".png"; })
演示
然而,这并不能从整体上解决问题。
我只需更改的背景颜色以匹配瓷砖的基本颜色(在这种情况下是一些浅灰色/紫色)。这当然是一个破解,但它保证会消除恼人的"闪烁"效果。
在我看来,让它如此糟糕的是闪烁的是白色的。
相关文章:
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 使用jQuery以红色和黑色闪烁文本
- 我的Tizen应用程序在点击时会闪烁
- IE6在启用/禁用文本字段上闪烁
- .scroll()函数在上次更新后在谷歌chrome中定位闪烁
- 页面加载之间闪烁
- 创建闪烁“;文本“;在javascript中
- 如何使用按键避免图像闪烁
- 刷新GoogleMaps tile服务器可以使用JavaScript,但不能使用GWT
- 使用setInterval()函数进行图像闪烁
- 1种颜色的Javascript闪烁文本更长
- addClass,它更改bg图像,但在第一次加载时没有闪烁
- reactjs重新渲染时画布闪烁
- Tiled中的Tile ID来自哪里
- 悬停时setInterval中的图像闪烁
- javascript样式的背景颜色在设置时闪烁.ASP.NET
- 按下按钮时图像持续闪烁
- 什么's导致我的<选择>框在选中时闪烁
- 铬刻度闪烁错误
- 避免在d3.geo.tile中闪烁