uniApp对于svg的支持记录

3,342 阅读1分钟

业务上遇到的问题是在使用uniApp开发IOS+Android双系统的情况下,将在其上绘制长路径,需要绘制的路径点峰值为1W3+个点。

前期使用canvas绘制这些点,但效果不近人意,这里就不细说了。

后续转为SVG绘制,因为SVG在APP上有更好的支持效果,在初次尝试后其在H5达到预期效果,但是在IOS上无法显示,通过使用Inspect(我使用的是windows)连接后发现uniApp在IOS+Android上对SVG的渲染有问题,渲染dom结果表现为:

image.png

可以看到是支持SVG的标签,但是该标签内的其他标签没有实际效果(既宽高总为0,无论如何设置,cx/cy/r均无效),使用path标签也无效。

通过查看SVG的文档以及uniApp的文档后发现,SVG不只可以直接使用标签<svg>...</svg> 也可以转为base64进行,而SVG转成base64也很方便,具体表现为:

const svg = '<svg viewBox="0 0 250 250" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="500" height="500">...<svg>'
svgUrl.value = `data:image/svg+xml,${svg}`

这里需要注意的一点就是,xmlnsxmlns:xlink是必须的否则img标签无法识别。

转化后的svg就变成base64格式的文件,直接将其赋值给img的src即可。

<img :src="svgUrl" alt="no SVG">

效果如图

image.png