滚动弹幕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>

视频:

滚动弹幕

相关推荐
anyup_前端梦工厂2 小时前
了解几个 HTML 标签属性,实现优化页面加载性能
前端·html
前端御书房2 小时前
前端PDF转图片技术调研实战指南:从踩坑到高可用方案的深度解析
前端·javascript
2301_789169542 小时前
angular中使用animation.css实现翻转展示卡片正反两面效果
前端·css·angular.js
风口上的猪20153 小时前
thingboard告警信息格式美化
java·服务器·前端
程序员黄同学4 小时前
请谈谈 Vue 中的响应式原理,如何实现?
前端·javascript·vue.js
爱编程的小庄4 小时前
web网络安全:SQL 注入攻击
前端·sql·web安全
宁波阿成5 小时前
vue3里组件的v-model:value与v-model的区别
前端·javascript·vue.js
柯腾啊5 小时前
VSCode 中使用 Snippets 设置常用代码块
开发语言·前端·javascript·ide·vscode·编辑器·代码片段
Jay丶萧邦5 小时前
el-select:有关多选,options选项值不包含绑定值的回显问题
javascript·vue.js·elementui
weixin_535854225 小时前
oppo,汤臣倍健,康冠科技,高途教育25届春招内推
c语言·前端·嵌入式硬件·硬件工程·求职招聘