JS弹幕代码分析

现在许多直播软件和视频都有弹幕功能,让我们来看看并分析是怎么实现的。

这边我主要分析下js的代码,想看源码的朋友送上链接,http://sandbox.xinfan.org/xdd...

HTML代码如下(css代码就不展示了,想看的直接看源码吧):

<div id="main" class="container">
        <p class="p0">啦啦啦啦啦啦啦</p>
        <p class="p1">啦啦啦啦啦啦啦</p>
    </div>
    <div class="footer">
        <input id="ipt" class="ipt" type="text" placeholder="说点什么?"/>
        <button id="launch" class="launch" type="button" onclick="Leave()">发射</button>
        <button id="clear" class="clear" type="button">清屏</button>
    </div>
</div>

JS代码如下:

    var num = 2;
    //声明了num=2
    var _p = document.getElementsByTagName("p");
    //获取标签p.
    var main = document.getElementById("main");
    //获取Id为mian的标签
    function Leave(){
        var colors = ["red","orange","yellow","pink","green"];
        //储存5个颜色
        var ipt = document.getElementById("ipt");
        //获取id为ipt的标签
        var launch = document.getElementById("launch");
        //获取id为launch的标签
        var creat_p = document.createElement("p");
        //创建一个p标签
        main.appendChild(creat_p).innerText = ipt.value;
        //往main子集放一个p标签并且p标签的文本为ipt的值
        ipt.value = "";
        //初始化ipt
        creat_p.className = "p" + num;
        //创建的p标签设置class为p2,p3,p4以此类推
        num++;
        //执行一次加上1.
        var _ran = Math.floor(Math.random()*1000);
        //声明个0-999的随机数.
        var F_ran = Math.floor(Math.random()*5)+15;
        //声明个15-19随机数
        var T_ran = _ran%11;
        //声明11个随机数,0-10;
        var C_ran = _ran%5;
        //声明5个随机数,0-4;
        creat_p.style.top = 30*T_ran + "px";
        //新创建的p标签给上一个top值,0-300px;
        creat_p.style.color = colors[C_ran];
        //新创建的p标签给上一个颜色,colors数组里面随机一个。
        creat_p.style.fontSize = F_ran + "px";
        //新创建的p标签给上一个字体大小15-19px;
    }
    var speeds = {};
    //声明一个空数组.
    function Speed(){
    //创建随机速度的函数
        for (var i=0;i<_p.length;i++) {
            var name = _p[i].className;
            //获取各个p标签的class值.
            speed = speeds[name];
            //将name传入speeds对象,并赋值给speed.
            if(speed == null){
            //如果speed等于null执行以下代码
                var S_ran = Math.floor(Math.random()*5)+1;
                //声明个随机数,1-5.
                speeds[name] = S_ran;
                //并将随机数赋值给speeds对象(json)的属性
            }
            var l = _p[i].style.left;
            //获取p标签的left值.
            if(l == 0){
                l = "0px";
            //如果l等于0,就给0加上px.
            }
            var s = parseInt(l) +speed;
            //解析l转化为数字,再加上一个随机数,以保证弹幕发送字体移动速度不同.
            _p[i].style.left = s + "px";
            //给各个p标签加上随机数
            if(main.offsetWidth < _p[i].offsetLeft){
            //如果p标签移动的位置大于mian的宽度
                main.removeChild(_p[i]);
                //删除这个p标签
                clearInterval();
                //清除定时器
            }

        }
    }

window.onload = function(){
    setInterval(Speed,50);
    //每50毫秒执行一下Speed函数
}



这次主要讲解了每行代码的作用,并没详细分析代码作用和思路,有疑问的朋友可以私信我,共同学习!

本文转载于:猿2048→https://www.mk2048.com/blog/blog.php?id=hhhhaaa0ihj

原文地址:https://www.cnblogs.com/jlfw/p/12529993.html

时间: 2024-09-29 11:15:35

JS弹幕代码分析的相关文章

jsencrypt代码分析——openssl的rsa加密解密在js的实现

在js上做rsa,感觉jsencrypt这个是封装的比较好的,但用起来还是遇到了些坑,所以踩进代码里填填坑- 项目在这里 https://github.com/travist/jsencrypt [rsa算法] 首先科普一下rsa:公钥私钥成对,用其中一个加密只能用另一个解密,常用公钥加密私钥解密. 一开始看到斯坦佛那个库,原始的算法实现: 长度,建议至少1024.模数n(常取默认65537)两边都要用. 指数e,和n一起就是公钥.指数d,和n一起就是私钥.质数p和q用于生成密钥对,然后就丢弃不

JQuery data API实现代码分析

JQuery data 接口是什么? .data() Store arbitrary data associated with the matched elements or return the value at the named data store for the first element in the set of matched elements. 根据jquery官网介绍,data给存储DOM关联的数据, 设置数据是对$选取的所有JQuery对象, 获取数据是对$选取的所有对象的

jqueryui.position.js源码分析

最近要写前端组件了,狂砍各种组件源码,这里分析一款jqueryui中的posistion插件,注意,它不是jqueryui widget,首先看下源码总体结构图 1.看到$.fn.position 是不是很熟悉?嗯,就是将position方法挂载到原型上,然后控件就可以直接调用了, 2.$.ui.position 这个对象是,用来进行冲突判断的,什么冲突?就是元素与父容器所拥有的空间以及当前可用窗口的控件,默认情形下,如果冲突则采用反转方向的方式显示:对这一点不要惊讶,一切都是为了正常显示而用的

JQuery html API支持解析执行Javascript脚本功能实现-代码分析

JQuery html用法(功能类似innerHTML) 开发中需要使用Ajax技术来更新页面局部区域, 使用的方法是ajax获取html代码段(字符串),然后将这个html代码段作为参数,传入目标DOM(JQuery对象)的JQuery html接口,此语句执行后, 会将html代码段解释执行, 显示出html代码段描述的页面控件. 例如: <html> <head> <script type="text/javascript" src="./

javascript实现复选框全选和取消代码分析

javascript实现复选框全选和取消代码分析:复选框是常用的元素之一,而点击实现全选和取消全选又是最为常用的功能,特别是在批量操作管理中,非常的方便,下面就通过代码实例介绍一下如何实现此效果,代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.soft

jsencrypt代码分析

jsencrypt代码分析--openssl的rsa加密解密在js的实现 在js上做rsa,感觉jsencrypt这个是封装的比较好的,但用起来还是遇到了些坑,所以踩进代码里填填坑- 项目在这里 https://github.com/travist/jsencrypt [rsa算法] 首先科普一下rsa:公钥私钥成对,用其中一个加密只能用另一个解密,常用公钥加密私钥解密. 一开始看到斯坦佛那个库,原始的算法实现: 长度,建议至少1024.模数n(常取默认65537)两边都要用. 指数e,和n一起

Node.js内存泄漏分析

在极客教育出版了一个视频是关于<Node.js 内存泄漏分析>,本文章主要是从内容上介绍如何来处理Node.js内存异常问题.如果希望学习可前往极客学院: 本文章的关键词 - 内存泄漏 - 内存泄漏检测 - GC分析 - memwatch 文章概要 由于内存泄漏在Node.js中非常的常见,可能在浏览器中应用javascript时,对于其内存泄漏不是特别敏感,但作为服务器语言运行时,你就不得不去考虑这些问题.由于很小的逻辑可能导致服务器运行一天或者一个星期甚至一个月才会让你发现内存不断上涨,而

AngularJS PhoneCat代码分析

原文:http://blog.javachen.com/2015/01/09/angular-phonecat-examples/ AngularJS 官方网站提供了一个用于学习的示例项目:PhoneCat.这是一个Web应用,用户可以浏览一些Android手机,了解它们的详细信息,并进行搜索和排序操作. 本文主要分析 AngularJS 官方网站提供的一个用于学习的示例项目 PhoneCat 的构建.测试过程以及代码的运行原理.希望能够对 PhoneCat 项目有一个更加深入全面的认识.这其中

代码分析之-再析《Flappy Pig》被高手破解

引用链接:<Flappy Pig>被高手破解,代码分析 前两天看到这篇文章, 有一种IOCCC的风格. 忍不住就做了下面的分析, 不足之处希望有高人不吝赐教, 先在此谢过. 很可惜, 是自动生成的. 不过还是有很多非常值得学习的地方. _ = ~[]; // -1;  /* 利用空数组和弱类型语言特性按位取反的来, 忽略类型js中空数组的值是与false和0相等的 */ _ = { ___ : ++_, // 0, 自增一 $$$$ : (![] + "")[_], //