• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 原生JavaScript实现弹幕组件的方法

原生JavaScript实现弹幕组件的方法

作者:站长图库 字体:[增加 减小] 来源:互联网

站长图库向大家介绍了原生JavaScript,弹幕组件等相关知识,希望对您有所帮助

原生JavaScript实现弹幕组件的方法


前言

如今几乎所有的视频网站都有弹幕功能,那么今天我们就自己用原生 JavaScript 封装一个弹幕类。这个类希望有如下属性和实例方法:

属性

el容器节点的选择器,容器节点应为绝对定位,设置好宽高

height 每条弹幕的高度

mode 弹幕模式,half则为一半容器高度,top为三分之一,full为占满

speed弹幕划过屏幕的时间

gapWidth后一条弹幕与前一条弹幕的距离

方法

pushData 添加弹幕元数据

addData持续加入弹幕

start开始调度弹幕

stop停止弹幕

restart 重新开始弹幕

clearData清空弹幕

close关闭

open重新显示弹幕


PS:有一些自封装的工具函数就不贴出来了,大概知道意思就好

初始化

引入JavaScript文件之后,我们希望如下使用,先采取默认配置。

let barrage = new Barrage({    el: '#container'})

参数初始化:

function Barrage(options) {    let {        el,        height,        mode,        speed,        gapWidth,    } = options    this.container = document.querySelector(el)    this.height = height || 30    this.speed = speed || 15000 //2000ms    this.gapWidth = gapWidth || 20    this.list = []    this.mode = mode || 'half'    this.boxSize = getBoxSize(this.container)    this.perSpeed = Math.round(this.boxSize.width / this.speed)    this.rows = initRows(this.boxSize, this.mode, this.height)    this.timeoutFuncs = []    this.indexs = []    this.idMap = []}

先接受好参数然后初始化,下面看看 getBoxSize 和 initRows

function getBoxSize(box) {    let {        height,        width    } = window.getComputedStyle(box)    return {        height: px2num(height),        width: px2num(width)    }    function px2num(str) {        return Number(str.substring(0, str.indexOf('p')))    }}

通过 getComputedStyleapi 计算出盒子的宽高,这里用来计算容器的宽高,之后也会用到。

function initRows(box, mode, height) {    let divisor = getDivisor(mode)    rows = Math.ceil(box.height * divisor / height)    return rows}function getDivisor(mode) {    let divisor = .5    switch (mode) {        case 'half':            divisor = .5            break        case 'top':            divisor = 1 / 3            break;        case 'full':            divisor = 1;            break        default:            break;    }    return divisor}

根据高度算出弹幕应该有多少行,下面会有地方用到行数。

插入数据

有两种插入数据的方法,一种是添加源数据,一种是持续添加。先来看添加源数据的方法:

this.pushData = function (data) {    this.initDom()    if (getType(data) == '[object Object]') {        //插入单条        this.pushOne(data)    }    if (getType(data) == '[object Array]') {        //插入多条        this.pushArr(data)    }}this.initDom = function () {    if (!document.querySelector(`${el} .barrage-list`)) {        //注册dom节点        for (let i = 0; i < this.rows; i++) {            let div = document.createElement('div')            div.classList = `barrage-list barrage-list-${i}`            div.style.height = `${this.boxSize.height*getDivisor(this.mode)/this.rows}px`            this.container.appendChild(div)        }    }}
this.pushOne = function (data) {    for (let i = 0; i < this.rows; i++) {        if (!this.list[i]) this.list[i] = []    }    let leastRow = getLeastRow(this.list) //获取弹幕列表中最少的那一列,弹幕列表是一个二维数组    this.list[leastRow].push(data)}this.pushArr = function (da
  


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 原生JavaScript实现弹幕组件的方法

相关文章

  • Phpcms自定义URL规则技巧
  • MySQL 日期加减函数汇总
  • PhotoShop制作魔幻霓虹火焰字效果的教程
  • PHP怎么只保留汉字
  • 如何手机端判断浏览器的类型(JavaScript)
  • Discuz!您当前的访问请求当中含有非法字符,已经被系统拒绝解决办法
  • 宝塔Linux面板之修改MySQL默认保存位置
  • jquery怎么判断指定子元素是否存在
  • wordpress优化:纯代码禁止文章自动保存及修订版本的方法
  • 分析PHP7.2忽略父类方法以及Liskov替换原则相关问题

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • PhotoShop制作滚动渐隐文字GIF动画教程
    • 深入浅析vue3+vite中怎么使用svg图标
    • 利用curl函数抓取网站数据,仿造IP+伪造来源+防屏蔽
    • DedeCMS使用sql语句获取文章链接地址
    • PHP会话控制:cookie和session区别与用法深入理解
    • AI和PS快速制作漂亮复古海报
    • 使用PHP+ajax+mysql+layui实现每日签到及提醒功能
    • Laravel怎么判断是否登录
    • PHP结合AJAX实现搜索提示功能
    • DEDECMS网页TITLE标签修改的利于SEO优化

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有