当前位置: 首页 > news >正文

滚动弹幕JS

题八:滚动弹幕

要求:
1.页面上漂浮字体大小不一、颜色不一,从左向右滚动的弹幕;
2.底部中间有一个发送功能,可以发送新的弹幕;
3.底部的发送部分可以向下收起和弹出。

原理:

  1. 首先写出弹幕的大小,颜色,等,!!一定要return,不然出不来。
  2. 要实现左移要不断加速度,当位置大于屏宽时,关闭定时器并移除弹幕。
  3. 在输入框中的文本传值时,调用createDanmuElement和滚动弹幕函数。
  4. 主要是靠公式:Math.floor(Math.random() * n ) + 1
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #danmu-container {
            position: relative;
            width: 100%;
            height: 400px;
            border: 1px solid #ccc;
        }
        #down {
            position: fixed;
            bottom: 0;
            left: 0;
            width: 100%;
            background-color: #f0f0f0;
            padding: 10px;
            display: flex;
            justify-content: center;
            align-items: center;
            transition: all 0.3s ease;
        }
        #down.hidden {
            bottom: -50px;
        }
        #message-input {
            width: 300px;
            padding: 5px;
            margin-right: 10px;
        }
        #send {
            padding: 5px 10px;
        }
        #up {
            position: absolute;
            bottom: 10px;
            left: 10px;
        }
    </style>
</head>
<body>
    <body>
        <div id="danmu-container"></div>
        <div id="down">
            <input type="text" id="message-input" placeholder="请发送一条友善的弹幕吧!">
            <button id="send">发送</button>
        </div>
        <button id="up">收起/弹出</button>
        <script>
            const danmuContainer = document.getElementById('danmu-container');
            const Down = document.getElementById('down');
            const messageInput = document.getElementById('message-input');
            const sendButton = document.getElementById('send');
            const upButton = document.getElementById('up');
    
            let isInputHidden = false;
    
            function createDanmuElement(text) {
                const danmu = document.createElement('div')
                danmu.textContent = text;
                danmu.style.position = 'absolute'
                //弹幕进入
                danmu.style.left = '-200px'
                //弹幕高度随机
                danmu.style.top = Math.floor(Math.random() * (danmuContainer.clientHeight - 30)) + 'px'
                //颜色随机
                danmu.style.color = `rgb(${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)})`
                //大小随机
                danmu.style.fontSize = Math.floor(Math.random() * 20) + 12 + 'px'
                //弹幕不换行
                danmu.style.whiteSpace = 'nowrap'
                //添加在后面
                danmuContainer.appendChild(danmu)
                return danmu
            }
            function moveDanmu(danmu) {
                //弹幕初始位置
                let left = -200 
                const speed = Math.floor(Math.random() * 3 ) + 1
                //从左到右
                const Timer = setInterval(() => {
                    //实现右移,每次移动一个speed
                    left += speed
                    danmu.style.left = left + 'px'
                    if (left > danmuContainer.clientWidth) {
                        clearInterval(Timer)
                        //关闭定时器后要移除弹幕
                        danmuContainer.removeChild(danmu)
                    }
                }, 10)
            }
            //传值,把打字框里的文本传给弹幕
            sendButton.addEventListener('click', function() {
                const text = messageInput.value
                const danmu1 = createDanmuElement(text)
                moveDanmu(danmu1)
                messageInput.value = ''
            });
            upButton.addEventListener('click', function() {
                isInputHidden =!isInputHidden
                if (isInputHidden) {
                    Down.classList.add('hidden')
                    upButton.textContent = '弹出'
                } else {
                    Down.classList.remove('hidden')
                    upButton.textContent = '收起'
                }
            })
            //先飘一些弹幕
            for (let i = 0; i < 5; i++) {
                const text = `弹幕1111`
                const danmu = createDanmuElement(text)
                moveDanmu(danmu)
            }
        </script>
</body>
</html>

视频:

滚动弹幕

相关文章:

  • 阿里云视频点播,基于thinkphp8上传视频
  • 性能测试流程、主流性能工具
  • Golang internals
  • Gateway中的Filter机制
  • 友好的教育
  • Golang并发编程最佳实践:协程与通道
  • SQLMesh 系列教程4- 详解模型特点及模型类型
  • 反向迭代器(reverse_iterator)的模拟实现
  • 关于视频去水印的一点尝试
  • centos docker ngnix
  • JavaScript内置对象
  • 在IDEA中误操作Git Rollback后的恢复方法
  • word分栏使得最后一页内容自动平衡
  • 【计算机网络】数据链路层数据帧(Frame)格式
  • Colmap 的安装与使用
  • 极狐GitLab 17.8 正式发布,多项 DevOps 重点功能解读【二】
  • 11-跳跃游戏
  • UE_C++ —— Unreal Smart Pointer Library
  • typescript快速入门之安装与运行
  • C++入门之《拷贝构造函数》详解
  • 秦洪看盘|风格有所转变,热钱回流高弹性品种
  • 我使馆就中国公民和企业遭不公正待遇向菲方持续提出严正交涉
  • 阿联酋与美国达成超过2000亿美元协议
  • 龚正市长调研闵行区,更加奋发有为地稳增长促转型,久久为功增强发展后劲
  • 思想史家陈谷嘉逝世,曾为岳麓书院当代复兴奠定重要基础
  • 商人运作亿元“茅台酒庞氏骗局”,俩客户自认受害人不服“从犯”判决提申诉