关于弹幕插件jquery.barrager.js初次使用心得

第一次发博客有点小紧脏。
事情开始于一周前,因为公司项目需要做一个弹幕展示的功能。室友给我推荐了一款弹幕 https://yaseng.org/jquery.barrager.js/ 插件。
网站代码说的很详细,但是,是基于PHP端后台做的,作为一个PHP文盲,真的很无力,但是还好,大致能了解写的什么。然后又遇上的JSON解析,有一次把自己文盲了。因为本盲一直使用的是XML(真的是发现了XML的难处了,之后会进一步学习JSON的!),所以后来决定使用自己在前端使用数组组装弹幕信息。

//弹幕的主要构成(实体类?原谅我不知道前端里面该怎么称呼)在这里插入图片描述


  var  barrage ={  
  	    img:'static/heisenberg.png', //图片  用户可以自己更改。
            info:'弹幕文字信息', //文字 
            close:true, //显示关闭按钮 
            speed:6, //延迟,单位秒,默认6 
            bottom:70, //距离底部高度,单位px,默认随机 
            color:'#fff', //颜色,默认白色 
            old_ie_color:'#000000', //ie低版兼容色,不能与网页背景相同,默认黑色 
           }

弹幕终于出来了,可是,出现了弹幕之间的碰撞问题。
后来参考了 http://qiutianaimeili.com/html/page/2017/09/aa31smab4oi.html 这位大大的 “跑道”思路,对代码进行修改,从而解决了弹幕碰撞的问题。

        function show_barrager(xml) {
            var cont= "";  //弹幕内容
            var imgurl = "";   //弹幕头像

            var bm = "";

            //每条弹幕发送间隔
            var looper_time = "";

           //这个是我自己加的,源码没有这个部分。可能是强迫症,觉得应该有一个变量就要声明一下。
            var lopper = ""; 
            
            //弹幕总数
            var total =num;
            //是否首次执行
            var run_once = true;
            //弹幕索引
            var index = 0;
            var items = new Array(num);


 	   //获取了固定弹幕展示的区域。所以对控件中的JS进行了同样的修改,原本的js是获取整个浏览器的高度。
 	   //首先将弹幕距离底部的高度修改,然后使用循环递归实现弹幕距离底部的高度改变。也是就将其安排在不同的跑道上
            var bottom = $("#div_danmu").height();


 	    //解析后台传来的XML
            $(xml).find("info").each(function (i) {
            
                cont= $(this).children("cont").text();
                imgurl= $(this).children("imgurl").text();
                
                if (imgurl == "") {
                    imgurl = "static/img/heisenberg.png";
                }

                if (bottom < 60) {  //设置小于60px是因为弹幕js的弹幕框高度是40px,为了保证弹幕之间有间隔,所以设置了60
                    bottom = $("#div_danmu").height() - 60; 
                } else {
                    bottom = bottom - 60;
                }

                items[i] = { 'img': imgurl, 'info': cont,'bottom':bottom }

            })


            //每条弹幕发送间隔
            looper_time = 1.2 * 1000;


            //先执行一次
            barrager();
            function barrager() {
                if (run_once) {
                    //如果是首次执行,则设置一个定时器,并且把首次执行置为false
                    looper = setInterval(barrager, looper_time);
                    run_once = false;
                }
                //发布一个弹幕
                if (items[index]!=null) {
                    $('#div_danmu').barrager(items[index]);
                    //索引自增
                    index++;
                }

                //所有弹幕发布完毕,清除计时器。
                if (index == total-1) {
                    clearInterval(looper);
                    return false;
                }
            }
        }

弹幕插件jquery.barrager.js,可以实现基本的功能,但是,其还有许多可以优化的地方。比如:是弹幕不碰撞,将弹幕区域分为多条跑道,同一条跑道中两条相邻弹幕出现的延时等,都是可以得到优化的地方。
不知道是不是因为该插件是用于浏览器端的,在手机上使用时,有些字数过长的内容,内容上无法显示,这个是还需要我下去解读的。

最后由衷感谢该弹幕插件开发与给出“跑道”思想的大大。
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值