动画渲染选择 svg/canvas? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
subframe75361

动画渲染选择 svg/canvas?

  •  
  •   subframe75361
    subframe7536 2022 年 9 月 8 日 3180 次点击
    这是一个创建于 1324 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://ibb.co/C2VtZ24

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

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

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

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

    • canvas在我的浏览器上很糊,ctx.scale(dpr,dpr)也不好使
    • konva.js的动画会导致圆角形变
    • svg没找到合适的库(gsap里没找到),手写path比较麻烦

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

    16 条回复    2022-09-10 17:26:18 +08:00
    rannnn
        1
    rannnn  
       2022 年 9 月 8 日   1
    subframe75361
        2
    subframe75361  
    OP
       2022 年 9 月 8 日
    @rannnn 感谢,好像有些效果了,但是放大到一定程度之后还是会糊掉...
    bojue
        3
    bojue  
       2022 年 9 月 8 日
    @subframe75361

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

    https://codepen.io/oldshensheep/pen/WNJwvRm
    subframe75361
        14
    subframe75361  
    OP
       2022 年 9 月 9 日
    leonkfd
        15
    leonkfd  
       2022 年 9 月 9 日   1
    很久以前写过一个音乐可视化的,用的是阿里的 G 渲染库。现在更新很多了,底层可选 svg/canvas/webgl 都行
    https://leon-kfd.github.io/g-music-visualizer/
    jones2000
        16
    jones2000  
       2022 年 9 月 10 日
    就这几根柱子,canvas 自己画下就够了。应该不需要用第 3 方库什么的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2842 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 57ms UTC 05:18 PVG 13:18 LAX 22:18 JFK 01:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86