业务上遇到的问题是在使用uniApp开发IOS+Android双系统的情况下,将在其上绘制长路径,需要绘制的路径点峰值为1W3+个点。
前期使用canvas绘制这些点,但效果不近人意,这里就不细说了。
后续转为SVG绘制,因为SVG在APP上有更好的支持效果,在初次尝试后其在H5达到预期效果,但是在IOS上无法显示,通过使用Inspect(我使用的是windows)连接后发现uniApp在IOS+Android上对SVG的渲染有问题,渲染dom结果表现为:
可以看到是支持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}`
这里需要注意的一点就是,xmlns和xmlns:xlink是必须的否则img标签无法识别。
转化后的svg就变成base64格式的文件,直接将其赋值给img的src即可。
<img :src="svgUrl" alt="no SVG">
效果如图