动画渲染选择 svg/canvas?

2022 年 9 月 8 日
 subframe75361

https://ibb.co/C2VtZ24

是音频波形可视化图,大概想法是这个样子,通过offlineAudioContext获取buffer,动态生成waveresize时根据宽度重新渲染,整个过程都需要有动画,

现在用的是多个div+flex布局实现的,是否性能不如svg/canvas

最开始用的是wavesurfer.js,用的是canvas,但是没有动画

尝试自行写canvas/svg之后发现

请问各位大佬有没有什么好的解决方法?

3557 次点击
所在节点    程序员
16 条回复
rannnn
2022 年 9 月 8 日
subframe75361
2022 年 9 月 8 日
@rannnn 感谢,好像有些效果了,但是放大到一定程度之后还是会糊掉...
bojue
2022 年 9 月 8 日
@subframe75361

模糊一般有两个方案:0.5 偏移+等比例缩放
subframe75361
2022 年 9 月 8 日
renmu
2022 年 9 月 8 日
就这么几个元素,感觉性能大差不差。
subframe75361
2022 年 9 月 8 日
@renmu 最高大概在 150 个节点,一次性缩减到 30 个节点的时候会卡一下...
xieren58
2022 年 9 月 9 日
pixi.js
rekulas
2022 年 9 月 9 日
pixi 配合相应的平滑迁移库可以试试,基于 webgl 渲染的
macy
2022 年 9 月 9 日
wavesurfer.j 在前端处理波形图数据么?可能会很卡,建议放到后端去处理,直接生成 pcm 数据
yuuko
2022 年 9 月 9 日
你的 canvas 要是显示宽度是 width , 那你要创建 width * window.devicePixelRatio 大小的 canvas
thinkershare
2022 年 9 月 9 日
如果显示的不是非常复杂, 使用 SVG 足够了, 它底层会使用硬件加速, 如果绘制的非常复杂, 无法简单的使用 svg 完成矢量化, 使用 canvas,然后用 WebGL 搞, WebGL 的 JS 库非常多. 我们用了做三维建模和数字孪生, 模型特别复杂的时候如果没有独立显卡, 会卡, 目前没有解决办法, 你这个足够简单, 我估计 SVG/HTML(transform)/Canvas(2D/3D)实现都不会有啥问题.
alexsunxl
2022 年 9 月 9 日
推荐用 webgl ,上手之后,调整效果很方便的。
库也多,性能也好,特效平滑
oldshensheep
2022 年 9 月 9 日
糊的话加上这个 CSS 属性
image-rendering: pixelated;
并且设置 context
ctx.imageSmoothingEnabled= false
完全不糊

https://codepen.io/oldshensheep/pen/WNJwvRm
subframe75361
2022 年 9 月 9 日
leonkfd
2022 年 9 月 9 日
很久以前写过一个音乐可视化的,用的是阿里的 G 渲染库。现在更新很多了,底层可选 svg/canvas/webgl 都行
https://leon-kfd.github.io/g-music-visualizer/
jones2000
2022 年 9 月 10 日
就这几根柱子,canvas 自己画下就够了。应该不需要用第 3 方库什么的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/878759

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX