vue中如何使用vue-baberrage生成弹幕

目录
  • 如何使用vue-baberrage生成弹幕
  • vue弹幕实现及优化
  • 总结

如何使用vue-baberrage生成弹幕

vue-baberrage这个插件本身有好多属性使用后不生效,不知道是不是自己使用的问题 T_T

安装弹幕插件;

npm install vue-baberrage --save

创建vue组件,在组件中引用vue-baberrage;

  import Vue from 'vue';
  import { vueBaberrage, MESSAGE_TYPE } from 'vue-baberrage';
  Vue.use(vueBaberrage);

html部分;

其中有几个属性设置后不生效,自己测试下吧;

<template>
  <div class="barrages-drop">
    <vue-baberrage
      :isShow="barrageIsShow"
      :barrageList="barrageList"
      :maxWordCount="maxWordCount"
      :throttleGap="throttleGap"
      :loop="barrageLoop"
      :boxHeight="boxHeight"
      :messageHeight="messageHeight"
    >
    </vue-baberrage>
  </div>
</template>

javaScript部分;

<script>
  import Vue from 'vue';
  import { vueBaberrage, MESSAGE_TYPE } from 'vue-baberrage';
  Vue.use(vueBaberrage);
  export default {
    name: 'barrages',
    //接收父组件传递过来的数组数据
    props:{
      barrage:{
        type:Array,
        required:true
      }
    },
    data() {
      return {
        barrageIsShow: true,
        messageHeight: 50,
        boxHeight: 150,
        barrageLoop: true,
        boxWidth:800,           //弹幕宽度
        maxWordCount: 300,
        throttleGap: 5000,       //消息间隔
        barrageList: [],
        barrage1: [],
      };
    },
    //因为父组件那边接口执行会比组件生成慢,所以用watch监听赋值
    watch: {
      barrage: function(newVal,oldVal){
        this.barrage1 = newVal;
        this.addToList();
      }
    },
    mounted() {

    },
    methods: {
      addToList() {
        console.log(this.barrage1)
        this.barrage1.forEach((v) => {
          this.barrageList.push({
            id: Math.round(Math.random()*5000),
            msg: v,
            time: this.randomNum(3,10),
            type: MESSAGE_TYPE.NORMAL,
            barrageStyle: ''
          });
        });
      },
      // 生成指定随机数,作用于每条弹幕的速度
      randomNum(minNum,maxNum){
        switch(arguments.length){
          case 1:
            return parseInt(Math.random()*minNum+1,10);
            break;
          case 2:
            return parseInt(Math.random()*(maxNum-minNum+1)+minNum,10);
            break;
          default:
            return 0;
            break;
        }
      }
    }
  }
</script>

css部分;

<style lang="scss">
  .baberrage-item{
    /*height: .5rem!important;*/
  }
  //强行改变弹幕背景色
  .baberrage-item .normal{
    background: rgba(0,0,0,0.3)!important;
  }
  .normal{
    .baberrage-msg{
      /*padding: .1rem!important;*/
    }
    .baberrage-avatar{
      display: none;
    }
//弹幕前头像不展示
    img{   
      display: none;
    }
  }
  .baberrage-avatar{
    img{
      width: 20px !important;
      height: 20px!important;
    }
  }
  .barrages-drop {
    .blue {
      border-radius: 100px;
      background: #e6ff75;
      color: #fff;
    }

    .green {
      border-radius: 100px;
      background: #75ffcd;
      color: #fff;
    }
    .red {
      background: rgba(0,0,0,0.1);
      color: red;
    }
    .yellow {
      border-radius: 100px;
      background: #dfc795;
      color: #fff;
    }
    .baberrage-stage {
      position: absolute;
      width: 100%;
      overflow: hidden;
      top: 0;
    }
  }
</style>

就这把,都是我改过原来的样式,跟原本的有差距,想要原本样式,可以查看他的文档

git文档地址:https://gitee.com/hoseapps/vue-baberrage

vue弹幕实现及优化

起因: 活动需求需要使用弹幕的形式展示内容

解决: 首先是找到一个vue-baberrage

然后使用起来看起来也没有什么问题,最后当我打开浏览器rendering的paint flash发现重绘严重

最后找到一个vue-danmaku 组件,发现不会频繁重绘

定位:弹幕移动使用transform改变位置,并使用will-change进行优化

will-change属性通过告诉浏览器什么属性、什么元素将会发生变化,可以对这些操作进行可能性的优化,由此提高CSS动画的执行效率

大量的节点动画渲染可以选择canvas或者webgl进行开发

声明: 我不是这两者的开发者,只是使用者,如有错误,欢迎指出

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Vue 实现简易多行滚动"弹幕"效果

    看一下效果: 实现任意行数的定时翻滚效果,不使用重复标签的方式,而是根据展示个数判断是否缺省,并添加对应展示个数的重复项来实现. Vue 的演示代码如下: <template> <div class="demo-comment-container"> <div class="scroll-container" :style="{height: `${height/100}rem`}" > <ul clas

  • vue实现弹幕功能

    (1)效果 如上图所示的效果,这里我们使用vue 制作. (2)使用技术 vue + vue-baberrage 1.安装:  npm install vue-baberrage 2.引入 方式一: import Vue from 'vue' import { vueBaberrage } from 'vue-baberrage' Vue.use(vueBaberrage) 方式二: const vueBaberrage = request('vue-baberrage').vueBaberra

  • 使用canvas实现一个vue弹幕组件功能

    看B站时,对弹幕的实现产生了兴趣,一开始想到用css3动画去实现,后来感觉这样性能不是很好,查了下资料,发现可以用canvas实现,于是就摸索着写了一个简单的弹幕. 弹幕功能 支持动态添加弹幕 弹幕不重叠 自定义弹幕颜色 效果图 demo 源码地址 前端框架选了比较熟悉的vuejs 弹幕滚动的基本思路就是通过定时器不断地改变弹幕的位置,时时重绘画布. 实现步骤 先加入一个canvas标签,这里有个注意点,关于设备像素比对canvas的影响,会出现绘图模糊. <canvas width="6

  • 在vue中如何封装G2图表

    目录 vue封装G2图表 vue引入G2图表 线上示例 特性 介绍一下在vue中使用G2 vue封装G2图表 <template>     <div id="id"></div> </template> <script> import G2 from '@antv/g2' import { DataSet } from '@antv/data-set' export default {     name: 'pie',    

  • vue中动态绑定表单元素的属性方法

    在vue中有时候可能想像使用jq一样给某个元素添加属性,如 $('#select1').attr('disabled','disabled') 这种方法也能实现,但是在vue中能用vue的方法还是尽量不要使用jq 使用vue的方法来添加属性可以这样: <select v-model='issues' class="ui dropdown t-select-list" :disabled='isDisabled'> <option></option>

  • 详解Vue中watch的高级用法

    假设有如下代码: <div> <p>FullName: {{fullName}}</p> <p>FirstName: <input type="text" v-model="firstName"></p> </div> new Vue({ el: '#root', data: { firstName: 'Dawei', lastName: 'Lou', fullName: '' },

  • vue中对接Graphql接口的实现示例

    说明: 本文是本人正在搞nestjs+graphql+serverless训练营中对Graphql讲解的基础知识点,可能有点前后没对接上,文中提到的Graphql授权也是下小节介绍的 一.对原来的Express返回Graphql项目修改 本章节使用的代码是express返回Graphql的代码,在使用前要先对代码进行基本的配置,比如处理跨域问题(Graphql本质也是发送一个http请求,既然是这样在vue项目中自然存在跨域的问题,需要先处理) 1.安装跨域的包,并且配置中间件 npm inst

  • vue中插件和组件的区别点及用法总结

    本教程操作环境:windows7系统.vue2.9.6版,DELL G3电脑. 一.组件是什么 回顾以前对组件的定义: 组件就是把图形.非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式,在Vue中每一个.vue文件都可以视为一个组件 组件的优势 降低整个系统的耦合度,在保持接口不变的情况下,我们可以替换不同的组件快速完成需求,例如输入框,可以替换为日历.时间.范围等组件作具体的实现 调试方便,由于整个系统是通过组件组合起来的,在出现问题的时候,可以用排除法直接移除组件,或者根据报错

  • 在Vue中使用防抖与节流,及this指向的问题

    目录 使用防抖与节流,及this指向问题 一顿操作后 使用防抖函数所遇见的坑 正常写法 使用 Vue中写法使用 Vue中的watch的防抖简写 使用防抖与节流,及this指向问题 最近项目中遇到了防抖与节流问题,搜索了很多文章都有this指向的问题,最后不得不采取一种很low的方法 data中定义isFirst为1 if (this.isFirst < 2){     this.isFirst = 2     setTimeout(() => {         this.isFirst =

  • vue中的文本空格占位符说明

    目录 vue文本空格占位符使用 下面是几个普通html常用字符 vue中空格表示 vue @占位符的代码提示 vue文本空格占位符使用 下面是几个普通html常用字符   空格 & & < < > > " " vue中空格表示 三种空格unicode(\u00A0,\u0020,\u3000)表示的区别 1.不间断空格\u00A0,主要用在office中,让一个单词在结尾处不会换行显示,快捷键ctrl+shift+space ; 2.半角空格(英

  • vue中引入路径@的用法及说明

    目录 引入路径@的用法及说明 Vue文件中引用路径的介绍 Vue中使用 vue项目路径使用@的原因 @是webpack设置的路径别名 使用场景 引入路径@的用法及说明 Vue文件中引用路径的介绍 1.路径 ./ ./当前文件同级目录 2.路径 …/ …/当前文件上一级目录 3.@符号 @ 的作用是在你引入模块时,可以使用 @ 代替 /src 目录,避免易错的相对路径. Vue中使用 1. vue.config.js配置文件中使用   chainWebpack(config) {     conf

  • vue中如何使用vue-baberrage生成弹幕

    目录 如何使用vue-baberrage生成弹幕 vue弹幕实现及优化 总结 如何使用vue-baberrage生成弹幕 vue-baberrage这个插件本身有好多属性使用后不生效,不知道是不是自己使用的问题 T_T 安装弹幕插件: npm install vue-baberrage --save 创建vue组件,在组件中引用vue-baberrage:   import Vue from 'vue';   import { vueBaberrage, MESSAGE_TYPE } from

  • vue中v-model动态生成的实例详解

    vue中v-model动态生成的实例详解 前言: 最近在做公司的项目中,有这么一个需求,每一行有一个input和一个select,其中行数是根据服务器返回的json数据动态变化的.那么问题来了,我们要怎样动态生成v-model? 现在项目做完了就整理了一下,直接贴代码了. <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <

随机推荐