1. 程式人生 > >直播彈幕效果

直播彈幕效果

<!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>