滚动弹幕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>
    <button id="send">发送</button>
    <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>

视频:

滚动弹幕

相关推荐
Hello--_--World2 小时前
为什么 用vite进行分包后,可以通过 浏览器强制缓存 提高性能?路由懒加载进行的分包与 vite进行的分包有什么不同?
前端·javascript·缓存·vite
三*一2 小时前
Mapbox GL JS 前端多边形分割实战:从踩坑到优雅实现
开发语言·前端·javascript·vue.js
秋収冬藏3 小时前
第一章:Dify 整体架构总览
前端
时光不负努力3 小时前
阶段 6:前端工程体系 - 企业级落地
前端
KaMeidebaby3 小时前
卡梅德生物技术快报|多肽库筛选技术构建药物递送功能肽库:流程、算法与质控体
前端·数据库·其他·百度·新浪微博
李剑一3 小时前
字节一面,考察的够全面的啊!面试官:请分阶段解释一下从输入URL到页面渲染整个链路中的关键环节和可观测点
前端
xChive3 小时前
前端请求取消:用 AbortController 从 fetch 到 axios
前端·vue.js·axios·fetch·abortcontroller
Python大数据分析@3 小时前
HTML会代替Markdown吗?为什么?
前端·html
一棵树73513 小时前
js总结介绍
前端·javascript·html
jiayong233 小时前
前端面试题库 - 工程化与性能优化篇
前端·面试·性能优化