直播彈幕效果
<!doctype html>
<!--宣告文件型別為HTML-->
<html>
<!--根標籤 超文字標記語言-->
<!--99%是雙標籤-->
<head>
<!--頭部 不視覺化標籤-->
<meta charset="UTF-8">
<!--utf-8:國際編碼-->
<!--網頁三要素:標題,關鍵字,描述-->
<title>直播彈幕</title>
<meta name="Keywords" content="關鍵字">
<meta name="Description" content="描述">
<style>
* {
margin: 0;
padding: 0;
}
.clearfix:after {
display: block;
content: "";
clear: both;
}
html,
body {
height: 100%;
user-select: none;
}
.screen {
overflow: hidden;
position: relative;
height: 100%;
background-color: rgba(0, 0, 0, .8);
}
.send {
position: absolute;
bottom: 0;
width: 100%;
height: 80px;
line-height: 80px;
background-color: rgba(0, 0, 0, .8);
text-align: center;
}
.input {
position: absolute;
left: 50%;
top: 50%;
margin: -20px -350px;
font-size: 0;
}
.text {
float: left;
width: 600px;
height: 40px;
border: none;
border-radius: 5px 0 0 5px;
text-indent: 7px;
}
.btn {
float: left;
width: 100px;
background-color: #65c33d;
line-height: 40px;
font-size: 16px;
color: #fff;
cursor: pointer;
}
.s_show div {
position: absolute;
font-size: 17px;
font-weight: bold;
}
</style>
</head>
<body>
<!--身體:網頁內容,視覺化標籤-->
<div class="screen">
<div class="send">
<div class="input clearfix">
<input type="text" class="text">
<div class="btn">發表評論</div>
</div>
</div>
<div class="s_show">
<div class="magictime twisterInUp">江湖人稱吳彥祖</div>
<div class="magictime twisterInUp">我受不了了</div>
<div class="magictime twisterInUp">哈哈哈哈或或或或</div>
<div class="magictime twisterInUp">扶我起來我還能學</div>
<div class="magictime twisterInUp">付出不亞於任何人的努力</div>
</div>
</div>
<script type="text/javascript">
/*
元件化,模組化,工程化
可維護性強,擴充套件性強
避免全域性汙染
模組化開發思路->
1.初始化本來在螢幕上的彈幕{
一獲取初始的原始彈幕
二垂直隨機:頁面可視高度減去傳送條高度,彈幕元素的top值隨機
三水平至右邊:頁面可視寬度減去彈幕自身的寬度
2.讓彈幕移動
一,無限迴圈的去呼叫移動函式
3.發表評論功能
一.獲取點擊發表事件
二建立div
三獲取一下text的內容
四給div新增class
五新增到父級物件裡
*/
//功能函式
(function () {
//獲取元素
var aShowList = document.querySelectorAll(".s_show div"),
oSend = document.querySelector(".send"),
oShow = document.querySelector(".s_show"),
oBtn = document.querySelector(".btn"),
oText = document.querySelector(".text");
//點擊發表彈幕事件
oBtn.onclick = send;
//點擊發送彈幕函式
function send() {
var oDiv = document.createElement("div");
oDiv.className = "magictime twisterInUp";
oDiv.innerHTML = oText.value; //獲取文字框內容
oShow.appendChild(oDiv);
init(oDiv);
oText.value="";
}
for (var i = 0; i < aShowList.length; i++) {
init(aShowList[i]) //執行init函式
}
//初始化函式
function init(obj) { //彈幕物件obj
var screenHeight = document.documentElement.clientHeight, //頁面可視高度
screenWidth = document.documentElement.clientWidth,
sendHeight = oSend.clientHeight, //獲取send元素的高度
left = screenWidth - obj.clientWidth - Math.random() * 100,
maxTop = screenHeight - sendHeight - obj.clientHeight;
obj.style.top = Math.random() * maxTop + "px"; //[0,maxTop)
obj.style.left = left + "px"; //設定left值
obj.style.color = randomColor();
move(obj, left);
}
//隨機顏色函式
function randomColor() {
return "#" + Math.random().toString(16).slice(-6)
/* var str="#";
for(var i=0;i<6;i++){
str+=Math.round(Math.random()*16).toString(16);
}
return str;
*/
}
//設定移動函式
function move(obj, left) { //傳obj為彈幕物件
var speed = 3;
if (left > -obj.clientWidth) {
left -= speed; //left值自減
obj.style.left = left + "px"; //設定當前的left值
requestAnimationFrame(function () { //動畫 引數:回撥函式
move(obj, left);
})
} else {
oShow.removeChild(obj); //刪除子節點
}
}
})()
</script>
</body>
</html>