移动端页面弹幕小Demo实例说明

弹幕小Demo实例地址

写在前面:尝试做了一下弹幕的实例,欢迎提出并指正问题

问题说明:

Demo中页面展示如下图所示:


Demo图片

如果图片挂了,请看文字说明:

简单的说弹幕只完成了一个功能,从右向左缓慢移动

Demo中所涉及到的文字参数说明如下:

  • 行走translateX= 屏幕宽度+弹幕宽度 + 70
  • 行走时间:屏幕宽度/50(初始时间)+弹幕宽度/500
  • 批次间隔时间:Math.min(初始时间/2,4200)
  • 移除条件:left<-(70+20)

ps:以上数字为自定的,无组织无规律,也可在对话框中设定更加无组织无纪律的数字,设定时请不要带单位,并没有做正则匹配也没有做兼容

未解决问题:

  • 弹幕重叠问题:当弹幕不定长时,弹幕是按照一定时间通过setInterval来批次放出,而不是当前一个结束划入屏幕之后,后一个再出现,如果可以判定当前什么时候在屏幕内滑到什么位置,就可以准确放出后一个弹幕,这样避免了弹幕重叠,如果给弹幕设定长则可一定程度上避免重叠。
  • 批次时间间隔设定问题:时间间隔设定较长,则避免长弹幕重叠,但短弹幕空白太大,时间间隔设定过短则长弹幕重叠,问题和上一个类似,如何在弹幕不定长时批次相隔紧凑且不重叠,这两个遇到的问题目前都没有解决

代码说明:

/*
 *弹幕调用:Barrage.danMuInit(aqueue);
 *弹幕插入:Barrage.danMuInsert(aqueue,data);
 *aqueue=[{'img':xx,'content':xx}]   data={'img':xx,'content':xx}
 */
var config = {
        init_time:'',//屏幕内滑动时间
        interval_time:'',//批次间隔时间
        line:'',//弹幕分行
        liWidth:'',//弹幕限宽
    }
var Barrage = {
        left:document.documentElement.clientWidth,
        translateX:document.documentElement.clientWidth||0,
        fontSize:'12',
        color:'#000',
        line:'',//弹幕所分行数
        top:[],//弹幕分行时绝对定位top值
        init_time:'',//弹幕屏内滑动时间
        interval_time:'',//弹幕每批出现间距时间
        timeCacluate:'',//弹幕暂停
        liWidth:'',//强制设置liwidth
        danMuInit:function(data){
            var self = this;
            self.top = [];
            self.line = parseInt(config.line)||3;
            self.init_time = parseInt(config.init_time)||document.documentElement.clientWidth/50;
            self.interval_time = parseInt(config.interval_time)||Math.min(self.init_time*1000/2,4200);
            for(var i = 0 ;i < self.line;i++){
                self.top.push(''+i*30+'px');
            };
            self.liWidth = parseInt(config.liWidth);
            
            self.danMuPlay(aqueue);
        },
        danMuPlay:function(data){
            if(typeof(data)=='underined'){return;}
            var self = this;
            var strLength = 0;
            var strWidth = 0;
            var add_time = 0;//与init_time共同构成行走时间
            
            self.timeCacluate = setInterval(function(){
                var arr = [];
                for(var x = 0;x<self.top.length&&data.length > 0;x++){                    
                    arr.push('<li data-type="'+data[0].type+'" data-mid="'+data[0].source_id+'" style="position: absolute;left:'+self.left+'px;top:'+self.top[x]+';display: inline-block;white-space: pre;">');
                    arr.push('![]('+data[0].img+')');
                    arr.push('<span>'+data[0].content+'</span>');
                    arr.push('</li>');
                    //重复播放时数据填充
                    var t = data.shift();
                    bqueue.push(t);
                    
                };
                $('.j_barrage').find('ul').append(arr.join(''));  
                $('.j_barrage').find('ul span').css('width',''+self.liWidth+'px');   
                var liWidth = 0;//此li用于非定宽时存储每个li宽度
                var liLength = $('.j_barrage').find('ul').children().length;

                for(var j = 0;j < liLength;){                              
                    for(k = 0;k<self.top.length&&j < liLength;k++){         
                        liWidth = $('.j_barrage').find('li').eq(j).width();
                        add_time = liWidth/500;
                        $('.j_barrage').find('li').eq(j).css({
                            'transform':'translateX(-'+(self.left+liWidth+70)+'px)',
                            'left':''+self.left+'px' ,
                            'transition':'transform '+(self.init_time+add_time)+'s linear'
                        });
                        j++;

                    }
                }      
                if(data.length == 0){
                    self.danMuPause();
                } 
            },self.interval_time)                           
            self.danMuClear();          
        },
        danMuInsert:function(queue,data){
            var self = this;
            var img =  'http://tva1.sinaimg.cn/default/images/default_avatar_male_50.gif';
            setTimeout(function(){
               queue.unshift({'img':img,'content':data.content}); 
               if(queue.data == ''){
                self.danMuPlay(queue);
               }               
           },2000);
        },
        danMuClear:function(){
            var clearLi = setInterval(function(){
                for(var i = 0;i<$('.j_barrage').find('ul').children().length;i++){
                    if($('.j_barrage').find('ul').children().eq(i).offset().left<-90){
                        console.log('remove')
                        $('.j_barrage').find('ul').children().eq(i).remove();
                    }
                }
            },1000)
        },
        danMuPause:function(){
            var self = this;
            clearInterval(self.timeCacluate);
        }
    };

ps:弹幕后场区……写错字了(弹幕候场区)……

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容

  • 2017.02.22 可以练习,每当这个时候,脑袋就犯困,我这脑袋真是神奇呀,一说让你做事情,你就犯困,你可不要太...
    Carden阅读 1,345评论 0 1
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,103评论 4 62
  • 从10月份坚持写作到现在,差不多两个多月的时间,基本上每天都在下班后写文章。这期间,我走了很多弯路,也总结了很多经...
    小小芬达阅读 9,029评论 203 603
  • 彻夜难眠,辗转反侧,沉浸在伤感回忆中难以自拔。去年今日,我和他分手告别,彼此没有回头,没有挽留,就这样松开了紧...
    Aliyahfang阅读 314评论 0 0
  • 佳宝几阅读 94评论 0 0