在iOS设备上放大时防止别名SVG元素

时间:2012-04-12 18:58:58

标签: javascript ios svg d3.js

我的任务是修复我公司的Web应用程序中的问题,该问题涉及使用D3库生成的SVG图。问题就在于图表最初显示正常;然而,当使用iPad或其他iOS设备观看并且用户放大图表时,它们很快会变得混淆/“模糊” - 如果可能的话,我希望防止这种质量损失。

您可以在此处查看问题的示例:normal graphzoomed graph

我之前从未使用过SVG或D3,而且我不确定它们是否提供了处理此类事情的任何选项;如果他们这样做,我就无法在我读过的任何文档中找到它们。

我觉得这可能是iOS缩放方法的产物,它们可能不是我能做的任何事情,除了试图捕捉缩放事件并触发图表在所需的放大级别重新渲染,尽管我不确定这是否可能。

如果有人对我如何解决这个问题有一些建议,我会非常感谢你的建议。

1 个答案:

答案 0 :(得分:4)

iOS上的默认缩放行为在缩放时使用固定分辨率纹理;这称为硬件加速缩放。因此,如果您使用两个手指拍摄页面的一小部分并放大,则在缩放时图形可能会暂时出现像素化。任何页面都是如此,因此许多iOS用户可能已经习惯了它。

作为矢量图形格式的SVG的好处是,只要你松开手指,浏览器就会以新的分辨率重新渲染SVG。

如果要在缩放时保持清晰的分辨率,则需要禁用本机硬件加速缩放,而是重新渲染图形以响应触摸事件。您可以使用d3.behavior.zoom向可视化添加平移和缩放交互。但请注意,根据可视化的复杂程度,这可能比硬件加速缩放慢。

这是一个将d3.behavior.zoom与d3.geo.path结合起来的示例,用于演示技术:http://bl.ocks.org/2374239