美文网首页
弹幕组件(一)

弹幕组件(一)

作者: 依然还是或者其他 | 来源:发表于2021-02-13 22:52 被阅读0次

弹幕组件

弹幕组件实现主要为DOM或Canvas实现。
主要涉及基本思路。

弹幕组件的设计

弹幕组件可以基本拆分为背景+弹道+弹幕的形式,其他的功能可以通过其他组件形式添加到背景上。

CSS3

弹幕的基本DOM结构

<!--容器-->
<div class="barrage-container" v-if="visible">
    <!--弹幕轨道-->
    <div
      class="barrage-tunnel"
      v-for="(tunnel, tindex) in tunnelList"
      :key="tindex"
    >
      <!--弹幕-->
      <div
        :class="{ 'barrage-item': true, 'barrage-move': true }"
        v-for="(barrage, index) in tunnel.barrageList"
        :key="barrage.id"
        :style="{
          'animation-duration': barrage.duration + 's',
          'animation-play-state': barrage.paused ? 'paused' : 'running',
        }"
        @animationend="handleAnimationend($event, tindex, index)"
        @click="handleClick($event, tindex, index,barrage)"
      >
      <!--弹幕内容-->
      
      </div>
    </div>

    
  </div>

动画 slidein,记得启用CSS硬件加速

@keyframes slidein {
  0% {
    transform: translate3d(100%, 0, 0)
  }
  100% {
    transform: translate3d(-200%, 0, 0)
  }
}

控制
通过监听DOM事件,改变对应的弹幕DOM属性、样式等,再重渲染时生效

Canvas

通过设置画布canvas,绘制弹幕文字或图片,设置x坐标,然后通过requestAnimationFrame不停的重绘并设置新的x坐标产生偏移量,达到动画的效果

两者各有优劣

DOM实现
优点:
1.DOM本身易于操作,有比较丰富的api
2.定义样式和动画,较为方便,通过CSS3\requestAnimationFrame等即可完成
缺点:
1.使用DOM操作存在自动重绘
2.若存在大量的弹幕即大量的DOM,会增加内存消耗,同时也会使重绘变的卡顿

Canvas实现
优点:
1.速度快
2.在渲染和动画时,可控制的颗粒度比DOM要细
3.可以处理大量元素,但不会增加消耗
缺点:
1.展示图像越大,渲染速度会慢
2.api复杂,使用便利程度不如DOM

参考

1.https://github.com/wechat-miniprogram/miniprogram-barrage

相关文章

网友评论

      本文标题:弹幕组件(一)

      本文链接:https://www.haomeiwen.com/subject/kjahxltx.html