小程序弹幕

需求:小程序实现弹幕功能,然后评论的内容需要审核(需要时间),所以不是及时的出现在弹幕(对我有利)。小程序实现弹幕并不难,主要这次我们的需求并不是用户点击发送就马上出现在视频上,而是审核后才能出现。
先看看小程序的video组件和API

VIdeo组件
这里写图片描述
这里写图片描述

API
这里写图片描述


这里我们要用到danmu-list
这里写图片描述
下面为他的数据格式,包含了内容(text),颜色(color),出现时间(time)

danmuList: [
      {
        text: '第 1s 出现的弹幕',
        color: '#ff0000',
        time: 1
      },
      {
        text: '第 3s 出现的弹幕',
        color: '#ff00ff',
        time: 3
    }]

这里我最头疼的是出现时间,我TM怎么知道你什么时候出现,又不是实时的。找了一下发现了下面这个事件
这里写图片描述

作用:视频播放的时候,返回当前播放的时间和视频的总时长(注意是播放状态,播放之前是获取不到这些的)

然后就有了两种思路:

  • 点击发送的时候,获取当前视频播放的时间,然后一起提交到后台(最好的办法)。
  • 获取总的时间,然后总的时间/通过审核的评论数,然后分配给每个danmu-listtime(因为要审核所以就没有具体要求实时出现,就给平均分配时间了);

想不到的是我用的是第二种(哭笑.png),因为第一种,后台要改接口,项目多,后台事也多,就没让他改接口。硬钢第二种。

第二种难点是小程序无法在播放之前获取到视频的总时间(需要后台,后台当时不清楚怎么弄),我就直接用bindtimeupdate事件获取,利用延迟先拿到总时间计算好每个text所需事件后,在分配给每个danmu-listtime
这里写图片描述
下面就是danmu-list所需的json数据。
这里写图片描述

注意:这里的time不支持小数点,小数点的话弹幕是不会出来的,必须是整数

颜色这里我是用封装的随机二进制颜色

function getRandomColor() {
  let rgb = []
  for (let i = 0; i < 3; ++i) {
    let color = Math.floor(Math.random() * 256).toString(16)
    color = color.length == 1 ? '0' + color : color
    rgb.push(color)
  }
  return '#' + rgb.join('')
}

##最后强烈建议小程序能给个API让我们能没有播放的状态下直接获取到视频的总时长
这里写图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐