记录一些微信小程序弹幕的坑

本文记录了在微信小程序中实现弹幕效果时遇到的两个问题:Barrage组件弹幕遗漏和Video时间戳精度问题。针对Barrage组件,通过调整tunnelMaxNum属性和避免内容为空的弹幕被移除来解决遗漏问题。对于Video的bindtimeupdate事件,由于不同设备时间戳精度差异导致弹幕发送延迟,改为过滤并逐条发送符合条件的弹幕。分享了解决这些问题的方法和思路。

1.Barrage 组件出现遗漏的问题

实现效果:
弹幕效果

使用Barrage组件时,发送的弹幕会出现遗漏的情况,类似该社区案例:地址
由于业务需求需要实现视频弹幕效果,调整了部分代码(根据自己猜想进行的调整,并不严谨,在此记录,仅供参考!):
但是调整考虑的方向有三点:
1.对象数据问题
2.动画效果问题
3.弹幕轨道问题

多次测试后发现:
1.barrage默认配置中 tunnelMaxNum属性为配置每个轨道的最大数组容量,每次发送一条弹幕时,会随机找一条空闲轨道(容量未满)来发送一条的弹幕,直至该轨道填满后不在支持发送,
2.发送的弹幕出现遗漏时,在下面代码中监听到弹幕对象bullet.content = “”,即内容为空的情况,因此不会发送弹幕

  Barrage.prototype.tunnelAnimate = function tunnelAnimate(tunnel) {
   
   
    var _this8 = this;
    if (tunnel.disabled || tunnel.sending || !this._isActive) return;
    var next = (tunnel.last + 1) % tunnel.maxNum;
    var bullet = tunnel.bullets[next];
    if (!bullet) return;
    //bullet.content 为空
    if (bullet.content || bullet.image.head || bullet.image.tail) {
   
   
      var _comp$setData;
      tunnel.sending = true;
      tunnel.last = next;
      var duration = this.duration;
      if (this.mode === 'overlap') {
   
   
        duration = this.distance * this.duration / (this.distance + bullet.width);
      }
      var passDistance = bullet.width + tunnel.safeGap;
      bullet.duration = duration;
      // 等上一条通过右边界
      bullet.passtime = Math.ceil(passDistance * bullet.duration * 1000 / this.distance);
      this.comp.setData((_comp$setData 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值