如今許多直播軟件和視頻都有彈幕功能,讓咱們來看看並分析是怎麼實現的。css
這邊我主要分析下js的代碼,想看源碼的朋友送上連接,http://sandbox.xinfan.org/xdd...html
HTML代碼以下(css代碼就不展現了,想看的直接看源碼吧):json
<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函數 }
此次主要講解了每行代碼的做用,並沒詳細分析代碼做用和思路,有疑問的朋友能夠私信我,共同窗習!app