js第八题
- 其他
- 2025-09-03 05:18:02

题八:滚动弹幕
要求:
1.页面上漂浮字体大小不一、颜色不一,从左向右滚动的弹幕;
2.底部中间有一个发送功能,可以发送新的弹幕;
3.底部的发送部分可以向下收起和弹出。
html
<div id="danmu-container"></div> <div id="control-panel"> <button id="toggle-btn">▲</button> <div id="input-box"> <input type="text" id="danmu-input" placeholder="输入弹幕内容"> <button id="send-btn">发送</button> </div> </div>css
body { margin: 0; overflow: hidden; background: white; font-family: '微软雅黑', sans-serif; } #danmu-container { height: calc(100vh - 60px); position: relative; } .danmu { position: absolute; white-space: nowrap; animation: move linear; pointer-events: none; } @keyframes move { from { transform: translateX(100vw); } to { transform: translateX(-100%); } } #control-panel { position: fixed; bottom: 0; left: 50%; transform: translateX(-50%); transition: all 0.3s ease; } #control-panel.hidden { transform: translate(-50%, 100%); } #input-box { background: rgba(255,255,255,0.9); padding: 15px; border-radius: 10px 10px 0 0; box-shadow: 0 -2px 10px rgba(0,0,0,0.2); display: flex; gap: 10px; } #toggle-btn { position: absolute; top: -30px; left: 50%; transform: translateX(-50%); background: #fff; border: none; padding: 5px 20px; border-radius: 15px 15px 0 0; cursor: pointer; box-shadow: 0 -2px 5px rgba(0,0,0,0.1); } #danmu-input { flex: 1; padding: 8px; border: 1px solid #ddd; border-radius: 4px; min-width: 300px; } #send-btn { background: #2196F3; color: white; border: none; padding: 8px 20px; border-radius: 4px; cursor: pointer; transition: background 0.3s; } #send-btn:hover { background: #1976D2; }js
const danmuContainer = document.querySelector('danmu-container'); const danmuInput = document.querySelector('danmu-input'); const sendBtn = document.querySelector('send-btn'); const toggleBtn = document.querySelector('toggle-btn'); const controlPanel = document.querySelector('control-panel'); // 生成随机颜色 function getRandomColor() { return '#' + Math.floor(Math.random()*16777215).toString(16); } // 创建弹幕元素 function createDanmu(text) { const danmu = document.createElement('div'); danmu.className = 'danmu'; danmu.textContent = text; // 随机样式 danmu.style.color = getRandomColor(); danmu.style.fontSize = `${Math.floor(12 + Math.random() * 12)}px`; danmu.style.top = `${Math.random() * (danmuContainer.offsetHeight - 30)}px`; // 动画配置 const duration = 8 + Math.random() * 4; // 8-12秒 danmu.style.animation = `move ${duration}s linear`; // 动画结束后移除元素 danmu.addEventListener('animationend', () => { danmu.remove(); }); return danmu; } // 发送弹幕 function sendDanmu() { const text = danmuInput.value.trim(); if (!text) return; const danmu = createDanmu(text); danmuContainer.appendChild(danmu); danmuInput.value = ''; } // 事件监听 sendBtn.addEventListener('click', sendDanmu); danmuInput.addEventListener('keypress', (e) => { if (e.key === 'Enter') sendDanmu(); }); // 控制面板切换 let isPanelVisible = true; toggleBtn.addEventListener('click', () => { isPanelVisible = !isPanelVisible; controlPanel.classList.toggle('hidden', !isPanelVisible); toggleBtn.textContent = isPanelVisible ? '▲' : '▼'; }); // 初始示例弹幕 setTimeout(() => { ['Hello World!', '这是一个弹幕示例', '可以输入文字试试', '点击箭头收起面板'].forEach(text => { danmuContainer.appendChild(createDanmu(text)); }); }, 500);视频
8