• 基于jquery的弹幕实现


    前几天,需要做一个弹幕展示效果,看了网上很多资料,但是很不凑巧,都不能满足自己的需求和功能点,但是总不能放弃吧,那么就自己写一个,今天把成果分享给大家,首先说一下市面上比较流行的弹幕插件吧:

    1. 1.有关视频的弹幕 http://www.jq22.com/jquery-info2123

    2. jquery.barrager.js

    3. 聊天弹幕 http://www.bootstrapmb.com/item/6429

    当然网上也有很多插件,重点说一下我看的这三款,第一款如果不碰撞还可以,但是不适合vue,需要自己改造,第二个会出现一个问题,弹幕数量过多时整体会卡顿,不适合大型弹幕效果,需要大家限制一下加载的条数;

    下面先把我的简单的demo呈现给大家:

    样式部分:

    .barrage_box{
        position: absolute;
        left:1080px;
        top:170px;
        background:rgba(208,70,91,0.56);
        border:1px solid rgba(255,255,255,0.56);
        border-radius: 30px;
        padding:8px 24px;
        line-height: 40px;
        font-size:24px;
        color:#fff;
        white-space: nowrap;
    }

    这里需要注意一下,这个弹幕需要添加层级,因为内容是未知的,所以我们写的时候不要宽度写死,不然弹幕会出现超出的情况,这个添加了不许换行,除非br,这里的背景色和字体设置以及border、位置都可以先写死,后面做成活的,也就是我们面向对象思想中的options,或者插件的配置项;

    下面是最简单的js

    function barragers(text){
       var $last = $('.barrage_box');
       if($last.length>0){
          var top = parseInt($($last[$last.length-1]).css('top'))=='NaN'?0:parseInt($($last[$last.length-1]).css('top'));
          var right = parseInt($($last[$last.length-1]).css('left'))=='NaN'?0+$($last[$last.length-1]).width():parseInt($($last[$last.length-1]).css('left'))+$($last[$last.length-1]).width();
          var id = new Date().getTime();
          var str = '<div class="barrage_box"  id="'+id+'">'+text+'</div>';
                $('body').append(str);
                var left= $('#'+id).width()+60;
                if(left<right){
                   var tops= '';
                   var top1 = top+65
                   if(top1<280){
                       tops = top1
                    }
                    if(top1>280&&top1<840){
                       tops= 860
                    }
                    if(top1<1000&&top1>860){
                       tops = top1
                    }
                    $('#'+id).css('top',tops+'px');
                    $('#'+id).animate({left:'-'+left+'px'},24000,function(){
                      $(this).remove();
                    })
                  }     
                }else{
                        var id = new Date().getTime();
                        var str = '<div class="barrage_box"  id="'+id+'">'+text+'</div>';
                        $('body').append(str);
                        var left= $('#'+id).width()+60;
                        $('#'+id).animate({left:'-'+left+'px'},24000,function(){
                            $(this).remove();
                        })
                    }
                    
                }

    需要注意的是我们每一次添加一个弹幕消息,需要唯一一个id,这样可以保证我们每一次都是一个独有的元素,同时判断动画执行完毕后,我们删除当前的元素,这样不会添加非常多的dom,这里的tops如果需要随机,可以利用math.random去实现随机位置控制和判断,因为我项目对于位置有一定的要求,所以添加了判断。注意唯一id,使用了时间戳,其实我们的打包很多项目都会使用这个会修改文件名称或者版本号

    可以自己修改一下这个就可以实现弹幕效果了

    优秀的人一直在路上,优秀的你一直在尝试写新bug
  • 相关阅读:
    链表面试题(一):反转链表的算法实现
    Flutter随笔(二)——使用Flutter Web + Docker + Nginx打造一个简单的Web项目
    Spring MVC知识要点
    ddd
    可编辑下拉框(ie6/chrome)
    Ajax+PHP简单实例
    移动app嵌套h5页面meta标签
    为什么python适合写爬虫?(python到底有啥好的?!)
    自学java第一天(写第一个程序)
    git桌面工具
  • 原文地址:https://www.cnblogs.com/starryyang/p/12031186.html
Copyright © 2020-2023  润新知