2019-02-02

彈幕姬
效果0.gif

HTML代碼
<!DOCTYPE html>
<html>
<head>
<title>彈幕姬</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="css.css">
<script type="text/javascript" src="jquery-3.3.1.min.js"></script>
</head>
<body onselectstart="return false;">

<div class="main">

<div class="barrage"></div>

<div class="btn">

<div class="text">
<input type="text" placeholder="發(fā)一個(gè)友善的彈幕見證當(dāng)下">
<div class="biu">發(fā)送</div>
</div>

<div class="color">
<span class="color1 onclick"></span>
<span class="color2"></span>
<span class="color3"></span>
<span class="color4"></span>
<span class="color5"></span>
<span class="color6"></span>
<span class="color7"></span>
<span class="color8"></span>
<span class="color9"></span>
<span class="color10"></span>
<span class="color11"></span>
<span class="color12"></span>
<span class="color13"></span>
<span class="color14"></span>
</div>

<div class="control">
<div class="kind"> 彈幕種類
<span class="clickKind">滾動(dòng)</span>
<span>頂部</span>
<span>底部</span>
</div>
<div class="frequency"> 彈幕頻率
<span class="clickKind">快</span>
<span>中</span>
<span>低</span>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="js.js"></script>
</body>
</html>

css
*{
padding: 0;
margin: 0;
}
body{
background-color: #03a9f4;
}
.main{
width: 800px;
height: 600px;
position: relative;
margin: 50px auto;
background-color: #000;
}
.main > div{
position: absolute;
width: 100%;
background-color: #000;
}
.barrage{
height: 80%;
overflow: hidden;
}
.barrage div{
position: absolute;
font-size: 20px;
cursor: default;
}
.myFrequency{
text-decoration: underline;
}
.btn{
height: 20%;
top: 80%;
}
.text{
position: absolute;
width: 100%;
height: 30px;
}
input{
position: absolute;
width: 596px;
height: 26px;
margin-left: 50px;
background-color: #eee;
color: #212121;
font-size: 16px;
}
.text div{
width: 60px;
height: 30px;
margin-left: 650px;
background-color: #00a1d6;
color: #fff;
font-size: 14px;
text-align: center;
line-height: 30px;
cursor: pointer;
}
.text div:hover{
filter: brightness(1.1);
}
.color{
position: absolute;
width: 350px;
height: 18px;
top: 35px;
left: 225px;
}
.color span{
display: inline-block;
height: 18px;
width: 18px;
cursor: pointer;
}
.onclick{
box-shadow: 0 0 1px 1px #fff;
}
.color1{
background-color: #FE0302;
}
.color2{
background-color: #FF7204;
}
.color3{
background-color: #FFAA02;
}
.color4{
background-color: #FFD302;
}
.color5{
background-color: #FFFF00;
}
.color6{
background-color: #A0EE00;
}
.color7{
background-color: #00CD00;
}
.color8{
background-color: #019899;
}
.color9{
background-color: #4266BE;
}
.color10{
background-color: #89D5FF;
}
.color11{
background-color: #CC0273;
}
.color12{
background-color: #222222;
}
.color13{
background-color: #9B9B9B;
}
.color14{
background-color: #FFFFFF;
}
.control{
position: absolute;
width: 600px;
height: 30px;
left: 100px;
top: 70px;
color: #fff;
font-size: 16px;
}
.control span{
display: inline-block;
width: 40px;
height: 25px;
cursor: pointer;
text-align: center;
line-height: 25px;
font-size: 16px;
background-color: #fff;
border-radius: 3px;
color: #f40;
}
.control span:hover{
background-color: orange;
color: #fff;
}
.clickKind{
background-color: orange !important;
color: #fff !important;
}
.control div{
float: left;
}
.frequency{
margin-left: 130px;
}

js
(function() { //彈幕種類綁定事件 for (let i = 0; i <('.kind').children().length; i++) {
('.kind').children().eq(i).click(function() { for (var j = 0; j <('.kind').children().length; j++) {
('.kind').children().eq(j).removeClass('clickKind'); }('.kind').children().eq(i).addClass('clickKind');
myFrequencykind = i;
})
}
//彈幕頻率綁定事件
for (let i = 0; i < ('.frequency').children().length; i++) {('.frequency').children().eq(i).click(function() {
for (var j = 0; j < ('.frequency').children().length; j++) {('.frequency').children().eq(j).removeClass('clickKind');
}
('.frequency').children().eq(i).addClass('clickKind'); switch (i) { case 0: frequencySpeed = 100; break; case 1: frequencySpeed = 300; break; case 2: frequencySpeed = 500; break; } clearInterval(frequencyTime); Interval(); }) } //選擇顏色綁定事件 for (let i = 0; i <('.color').children().length; i++) {
('.color').children().eq(i).click(function() { for (var j = 0; j <('.color').children().length; j++) {
('.color').children().eq(j).removeClass('onclick'); }('.color').children().eq(i).addClass('onclick');
myFrequencycolor = i;
})
}
//刪去已經(jīng)出去的彈幕
setInterval(function() {
for (var i = 0; i < ('.barrage').children().length; i++) { if (('.barrage').children().eq(i).position().left <= -('.barrage').children().eq(i).width()) {('.barrage').children().eq(i).remove();
}
}
}, 100)
Interval();
('.biu').click(function() { if (('input').val() != '') {
('.barrage').append('<div class="myFrequency">' +('input').val() + '</div>');
switch (myFrequencykind) {
case 0:
myRolling();
break;
case 1:
myTopfrequency();
break;
case 2:
myBottomfrequency();
break;
}
$('input').val('');
}
})
})

//電腦產(chǎn)生的彈幕數(shù)組
var computerFrequency = []
//彈幕字符串?dāng)?shù)組
var frequencyArry = ['前方高能', 'prprprprpr', '2333333', '還有這種操作', '前排打call', '666666', '我們是冠軍', '刀劍神域', '盤他', '沖沖沖', '報(bào)告指揮部,空降成功'];
var frequencySpeed = 100; //彈幕出現(xiàn)頻率
var myFrequencykind = 0; //自己發(fā)射彈幕種類
var myFrequencycolor = 0; //自己發(fā)射彈幕顏色
function Interval() {
frequencyTime = setInterval(function() {
creatFrequency();
}, frequencySpeed)
}
//向下取整隨機(jī)數(shù)函數(shù)[min,max)
function intRandom(min, max) {
return Math.floor(Math.random() * (max - min) + min);
}

function floatRandom(min, max) {
return Math.random() * (max - min) + min;
}

function creatFrequency() {
var frequencyKind = intRandom(0, 3); //取一個(gè)隨機(jī)數(shù)判斷彈幕類型 0:滾動(dòng)彈幕构资,1:頂部彈幕抽诉,2:底部彈幕
switch (frequencyKind) {
case 0:
rolling();
break;
case 1:
topFrequeny();
break;
case 2:
bottomFrequeny();
break;
}

}
//滾動(dòng)彈幕函數(shù)
function rolling() {
var frequencyContent = intRandom(0, frequencyArry.length); //取一個(gè)隨機(jī)數(shù)判斷電腦出現(xiàn)什么彈幕內(nèi)容
var frequencyColor = intRandom(0, 14); //滾動(dòng)彈幕隨機(jī)顏色
var frequencyTop = floatRandom(0, 460); //滾動(dòng)彈幕取隨機(jī)高度
('.barrage').append('<div>' + frequencyArry[frequencyContent] + '</div>');('.barrage').children().last().css({
'top': frequencyTop + 'px',
'width': frequencyArry[frequencyContent].length * 20 + 'px',
'right': -frequencyArry[frequencyContent].length * 20 + 'px',
'height': '25px'
})
color(frequencyColor);
('.barrage').children().last().animate({ 'right': '800px' }, 5000); } //頂部彈幕 function topFrequeny() { var frequencyContent = intRandom(0, frequencyArry.length); //取一個(gè)隨機(jī)數(shù)判斷電腦出現(xiàn)什么彈幕內(nèi)容 var frequencyColor = intRandom(0, 14); //滾動(dòng)彈幕隨機(jī)顏色 var frequencyTop = floatRandom(0, 150); //滾動(dòng)彈幕取隨機(jī)高度('.barrage').append('<div>' + frequencyArry[frequencyContent] + '</div>');
('.barrage').children().last().css({ 'top': frequencyTop + 'px', 'width': frequencyArry[frequencyContent].length * 20 + 'px', 'left': '320px', 'height': '25px' }) color(frequencyColor); setTimeout(function() { for (var i = 0; i <('.barrage').children().length; i++) {
if (('.barrage').children().eq(i).position().left == 320 &&('.barrage').children().eq(i).position().top <= 150) {
$('.barrage').children().eq(i).remove();
break;
}
}
}, 2000)
}

function bottomFrequeny() {
var frequencyContent = intRandom(0, frequencyArry.length); //取一個(gè)隨機(jī)數(shù)判斷電腦出現(xiàn)什么彈幕內(nèi)容
var frequencyColor = intRandom(0, 14); //滾動(dòng)彈幕隨機(jī)顏色
var frequencyTop = floatRandom(300, 450); //滾動(dòng)彈幕取隨機(jī)高度
('.barrage').append('<div>' + frequencyArry[frequencyContent] + '</div>');('.barrage').children().last().css({
'top': frequencyTop + 'px',
'width': frequencyArry[frequencyContent].length * 20 + 'px',
'left': '320px',
'height': '25px'
})
color(frequencyColor);
setTimeout(function() {
for (var i = 0; i < ('.barrage').children().length; i++) { if (('.barrage').children().eq(i).position().left == 320 && ('.barrage').children().eq(i).position().top >= 300) {('.barrage').children().eq(i).remove();
break;
}
}
}, 2000)
}

function color(colorKind) {
switch (colorKind) {
case 0:
('.barrage').children().last().css('color', '#FE0302'); break; case 1:('.barrage').children().last().css('color', '#FF7204');
break;
case 2:
('.barrage').children().last().css('color', '#FFAA02'); break; case 3:('.barrage').children().last().css('color', '#FFD302');
break;
case 4:
('.barrage').children().last().css('color', '#FFFF00'); break; case 5:('.barrage').children().last().css('color', '#A0EE00');
break;
case 6:
('.barrage').children().last().css('color', '#00CD00'); break; case 7:('.barrage').children().last().css('color', '#019899');
break;
case 8:
('.barrage').children().last().css('color', '#4266BE'); break; case 9:('.barrage').children().last().css('color', '#89D5FF');
break;
case 10:
('.barrage').children().last().css('color', '#CC0273'); break; case 11:('.barrage').children().last().css('color', '#222222');
break;
case 12:
('.barrage').children().last().css('color', '#9B9B9B'); break; case 13:('.barrage').children().last().css('color', '#FFFFFF');
break;
}
}

function myRolling() {
var frequencyTop = floatRandom(0, 460); //滾動(dòng)彈幕取隨機(jī)高度
('.barrage').children().last().css({ 'top': frequencyTop + 'px', 'width':('input').val().length * 20 + 'px',
'right': -('input').val().length * 20 + 'px', 'height': '25px' }) color(myFrequencycolor);('.barrage').children().last().animate({
'right': '800px'
}, 5000);
}

function myTopfrequency() {
var frequencyTop = floatRandom(0, 150); //滾動(dòng)彈幕取隨機(jī)高度
('.barrage').children().last().css({ 'top': frequencyTop + 'px', 'width':('input').val().length * 20 + 'px',
'left': '320px',
'height': '25px'
})
color(myFrequencycolor);
setTimeout(function() {
for (var i = 0; i < ('.barrage').children().length; i++) { if (('.barrage').children().eq(i).position().left == 320 && ('.barrage').children().eq(i).position().top <= 150) {('.barrage').children().eq(i).remove();
break;
}
}
}, 2000)
}

function myBottomfrequency() {
var frequencyTop = floatRandom(300, 450); //滾動(dòng)彈幕取隨機(jī)高度
('.barrage').children().last().css({ 'top': frequencyTop + 'px', 'width':('input').val().length * 20 + 'px',
'left': '320px',
'height': '25px'
})
color(myFrequencycolor);
setTimeout(function() {
for (var i = 0; i < ('.barrage').children().length; i++) { if (('.barrage').children().eq(i).position().left == 320 && ('.barrage').children().eq(i).position().top >= 300) {('.barrage').children().eq(i).remove();
break;
}
}
}, 2000)
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吐绵,隨后出現(xiàn)的幾起案子迹淌,更是在濱河造成了極大的恐慌河绽,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唉窃,死亡現(xiàn)場(chǎng)離奇詭異耙饰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)纹份,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門苟跪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔓涧,“玉大人,你說我怎么就攤上這事篷扩≤哉担” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)掏导。 經(jīng)常有香客問我,道長(zhǎng)趟咆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任鳞贷,我火速辦了婚禮虐唠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咱筛。我一直安慰自己杆故,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布饲趋。 她就那樣靜靜地躺著,像睡著了一般奕塑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上敷鸦,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天寝贡,我揣著相機(jī)與錄音,去河邊找鬼圃泡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛价说,可吹牛的內(nèi)容都是我干的风秤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼领迈,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼狸捅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起尘喝,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤朽褪,失蹤者是張志新(化名)和其女友劉穎无虚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體橡淑,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡咆爽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了符糊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡行贪,死狀恐怖模闲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情啰脚,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布橄浓,位于F島的核電站亮航,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏准给。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仇哆。 院中可真熱鬧,春花似錦讹剔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至狞玛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間心肪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工慧瘤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留固该,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓上煤,卻偏偏與公主長(zhǎng)得像著淆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子独泞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容