This time I will show you how to use JS code to create barrage effects. What are the things to note? Here are actual cases, let’s take a look.
Implementation principle1. Set the position attribute of the display barrage element to relative2. Dynamically create the barrage element, set the position attribute to absolute, and left is the display width
3. Randomly set the top value of the barrage element
4. Randomly generate the movement rate of the barrage element and modify the left value
The second implementation let color = '#' + Math.floor(Math.random() * 16777215).toString(16) ;
The third implementation let r = Math.floor(Math.random()*256);let g = Math.floor(Math.random()*256);let b = Math.floor( Math.random()*256);let color = `rgb(${r},${g},${b})`;
50 * +Math.random().toFixed(2)
<div class="container"> <div id="content" class="content"></div> <div class="content-opt"> <div id="content-text" class="content-text"></div> <div class="content-input"> <input id="text" type="text"> <button id="send">发送</button> </div> </div> </div>
* { box-sizing: border-box; outline: none; } p { margin: .5em; word-break: break-all; } .container { position: relative; width: 700px; height: 500px; margin: auto; padding-right: 200px; } .content { width: 100%; height: 100%; border: 1px solid #ccc;} .content-opt { position: absolute; top: 0; right: 0; width: 200px; height: 100%; } .content-text { height: calc(100% - 30px); margin-bottom: 30px; border: 1px solid #ccc; overflow: auto; } .content-input { position: absolute; bottom: 0; width: 100%; height: 30px; border: 1px solid #ccc;} .content-input input { width: 70%; padding: 2px; border-radius: 5px; } .content-input button { padding: 3px 10px; border: none; border-radius: 5px; background: rgb(90, 154, 214); }
(function () { class Barrage { constructor(id) { this.domList = []; this.dom = document.querySelector('#' + id); if (this.dom.style.position == '' || this.dom.style.position == 'static') { this.dom.style.position = 'relative'; } this.dom.style.overflow = 'hidden'; let rect = this.dom.getBoundingClientRect(); this.domWidth = rect.right - rect.left; this.domHeight = rect.bottom - rect.top; } shoot(text) { let div = document.createElement('div'); div.style.position = 'absolute'; div.style.left = this.domWidth + 'px'; div.style.top = (this.domHeight - 20) * +Math.random().toFixed(2) + 'px'; div.style.whiteSpace = 'nowrap'; div.style.color = '#' + Math.floor(Math.random() * 0xffffff).toString(16); div.innerText = text; this.dom.appendChild(div); let roll = (timer) => { let now = +new Date(); roll.last = roll.last || now; roll.timer = roll.timer || timer; let left = div.offsetLeft; let rect = div.getBoundingClientRect(); if (left < (rect.left - rect.right)) { this.dom.removeChild(div); } else { if (now - roll.last >= roll.timer) { roll.last = now; left -= 3; div.style.left = left + 'px'; } requestAnimationFrame(roll); } } roll(50 * +Math.random().toFixed(2)); } } let barage = new Barrage('content'); function appendList(text) { let p = document.createElement('p'); p.innerText = text; document.querySelector('#content-text').appendChild(p); } document.querySelector('#send').onclick = () => { let text = document.querySelector('#text').value; barage.shoot(text); appendList(text); }; const textList = ['弹幕', '666', '233333333', 'javascript', 'html', 'css', '前端框架', 'Vue', 'React', 'Angular', '测试弹幕效果' ]; textList.forEach((s) => { barage.shoot(s); appendList(s); }) })()
Use H5 canvas to create barrage effects
The above is the detailed content of Use JS code to create barrage effects. For more information, please follow other related articles on the PHP Chinese website!