哔哩哔哩动画(b站)弹幕是怎么实现的?
我看了下弹幕的代码,用到了transition
和3d加速,只是有些疑惑如下:
1、不太明白弹幕很多的时候是怎么解决卡顿的。
2、transition
动画是怎么实现暂停的,弹幕div有个animation pause的属性,但是没有找到keyframe动画。
3、加了will-change: transform
属性,动画结束后恢复到auto
,但感觉没啥变化……
4、我用的是定时器setInterval
,当毫秒数设置的比较低的时候,会出现轻微的卡顿。如果用requestAnimationFrame
的话,速度怎么控制呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
确实是transition动画,没看到3D加速,will-change倒是有
没用annimation动画。
animation-play-state:paused;
没卵用,估计是历史遗留,以前可能是annimation处理的,故有此一举。播放器弹幕的处理方式是:
播放时,设置其
translateX
和transform
。暂停时,把当前的位置写为
translateX
,transform
为0,这个时候弹幕就保持在那个位置不动了。再次播放时,重新设置translateX和transform,当然,transform-duration肯定是依据弹幕长度,当前位置和终点位置(播放器宽度)计算出来的。
播放和暂停的逻辑全都由js处理。
弹幕到位了以后,dom会被移除。
再加上
will-change
的GPU加速,所以不卡去看了一眼style的变化,以上是一点猜测
2018年9月5日20:22:23,补充一下。
研究了一下,B站另外还做了一个操作就是复用dom,弹幕走到头以后不会移除,而是在有下一个新弹幕的时候把原来的dom节点复用,修改style,使其重新播放一次,这个也是性能提高的一个处理办法