現在許多直播軟體和視訊都有彈幕功能,讓我們來看看並分析是怎麼實現的。
這邊我主要分析下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函式
}
這次主要講解了每行程式碼的作用,並沒詳細分析程式碼作用和思路,有疑問的朋友可以私信我,共同學習!