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="发一个友善的弹幕见证当下">
<div class="biu">发送</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">滚动</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;
})
}
//删去已经出去的弹幕
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('');
}
})
})

//电脑产生的弹幕数组
var computerFrequency = []
//弹幕字符串数组
var frequencyArry = ['前方高能', 'prprprprpr', '2333333', '还有这种操作', '前排打call', '666666', '我们是冠军', '刀剑神域', '盘他', '冲冲冲', '报告指挥部,空降成功'];
var frequencySpeed = 100; //弹幕出现频率
var myFrequencykind = 0; //自己发射弹幕种类
var myFrequencycolor = 0; //自己发射弹幕颜色
function Interval() {
frequencyTime = setInterval(function() {
creatFrequency();
}, frequencySpeed)
}
//向下取整随机数函数[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); //取一个随机数判断弹幕类型 0:滚动弹幕,1:顶部弹幕,2:底部弹幕
switch (frequencyKind) {
case 0:
rolling();
break;
case 1:
topFrequeny();
break;
case 2:
bottomFrequeny();
break;
}

}
//滚动弹幕函数
function rolling() {
var frequencyContent = intRandom(0, frequencyArry.length); //取一个随机数判断电脑出现什么弹幕内容
var frequencyColor = intRandom(0, 14); //滚动弹幕随机颜色
var frequencyTop = floatRandom(0, 460); //滚动弹幕取随机高度
('.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); //取一个随机数判断电脑出现什么弹幕内容 var frequencyColor = intRandom(0, 14); //滚动弹幕随机颜色 var frequencyTop = floatRandom(0, 150); //滚动弹幕取随机高度('.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); //取一个随机数判断电脑出现什么弹幕内容
var frequencyColor = intRandom(0, 14); //滚动弹幕随机颜色
var frequencyTop = floatRandom(300, 450); //滚动弹幕取随机高度
('.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); //滚动弹幕取随机高度
('.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); //滚动弹幕取随机高度
('.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); //滚动弹幕取随机高度
('.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)
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容