js实现网页特效(利用原生js模拟直播弹幕滚动效果)
类别:编程学习 浏览量:831
时间:2021-10-07 00:57:13 js实现网页特效
利用原生js模拟直播弹幕滚动效果目录
- 1、基本原理
- 2、具体代码
- 总结
首先将直播区域分成十份(我个人自己为了便于计算分成十份),将输入的内容随机放到分成的十份区域中,插入到十份区域右边的视图之外,然后调用动画,按照随机的速度从右向左移动,当移动到左侧区域视图之外移除此滚动元素。
2、具体代码<li class="move_video_content"> <li class="video_content"> <li class="video_li" id="video_view"></li> <li class="scroll_content"> <ul class="scroll_ul" id="scroll_ul_id"></ul> </li> </li> <li class="input_content"> <input type="text" class="input_text" maxlength="30" placeholder="请输入要发送的弹幕" id="input_text_id"> <button type="button" class="button_btn" id="send_btn">发送</button> </li> </li>
具体效果如下:
js代码如下
let inputText = document.getElementById("input_text_id");//input输入框 let scrollContent = document.getElementById("scroll_ul_id");//侧边聊天栏 let videoView = document.getElementById("video_view");//视频区域 let videoWidth = videoView.offsetWidth;//直播区域的总宽度 let listHeight = videoView.offsetHeight/10;//每一层直播区域的高度 let listTopNum = [0,1,2,3,4,5,6,7,8,9];//将直播区域的高度分成10层 document.getElementById("send_btn").addEventListener("click",function(){//监听发送按钮 let value = inputText.value;//获取输入框的值 if(!value) return; appendDom(value);//将输入框的值插入到滚动聊天中 createVideoBulletChatDom(value);//将输入框的值插入到弹幕中 inputText.value = '';//清空输入框 scrollContent.scrollTop = scrollContent.scrollHeight;//自动滚动到底部 }) function appendDom(value){//将输入框的值插入到滚动聊天中 let li = document.createElement("li"); li.setAttribute("class","scroll_li"); li.innerHTML = value; scrollContent.appendChild(li); } let speedArr = ['normal','fast','faster']; function createVideoBulletChatDom(value){//将输入框的值插入到弹幕中 let num = listTopNum[Math.floor((Math.random()*listTopNum.length))]; let p = document.createElement("p"); p.setAttribute("class","video_p"); p.style.top = (num * 60) + "px"; p.style.left = videoWidth + "px"; p.innerHTML = value; videoView.appendChild(p); let speed = speedArr[Math.floor((Math.random()*speedArr.length))]; Animate(p,speed);//滚动动画 } let animateType = { 'normal':5, 'fast':10, 'faster':15 } function Animate(dom,speed){//滚动动画 let domWidth = dom.offsetWidth;//当前弹幕元素的宽度 let distance = videoWidth;//直播区域的总宽度 speed ? speed : 'normal'; let interval = animateType[speed] let timer = setInterval(function(){ distance -= interval; dom.style.left = distance + 'px'; if(distance <= -domWidth){ clearInterval(timer); videoView.removeChild(dom);//清除已经滚动出屏幕的标签 } },50) }
根据直播区域分成的十份(listTopNum),获取每一层区域的高度(listHeight),然后改变滚动标签的top实现插入到十份中的不同区域。
创建一个滚动标签就创建一个滚动动画(函数Animate),默认速度是normal,每次创建动画都会随机传入一个随机速度类型(normal、fast、faster),按照传入的速度类型来改变每次滚动减去的距离大小,实现不同的滚动速度。
总结这是个人闲着无事一时兴起写的一个直播滚动动画,如果加上WebSocket就能实现多人同步通信,这个以后无事再做完善。
具体代码请访问[:github.com/liqc-wwl/bu…]下载下来就能直接看效果。
到此这篇关于利用原生js模拟直播弹幕滚动效果的文章就介绍到这了,更多相关js模拟直播弹幕滚动内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- js函数声明和函数表达式的区别
- JS中对象的属性
- extjs 日期控件
- js竖屏切换程序(js判断移动端横竖屏视口检测实现的几种方法)
- JS实现文字向下滚动
- JS闭包的用法
- vue怎么定义router的动态路由(vue.js Router中嵌套路由的实用示例)
- python获取json结果保存文本(Python JSON格式数据的提取和保存的实现)
- extjs column列布局
- vuejs filter过滤器的使用(Vue过滤器filter实现及应用场景详解)
- react实现js控制样式(React + Threejs + Swiper 实现全景图效果的完整代码)
- js宏任务都有哪些(JavaScript 操作宏任务与微任务)
- css3结合js制作(CSS3截取字符串实例代码推荐)
- 动态加载js脚本
- js编写简单网页计算器(js实现网页计算器)
- js时间变成日期格式(js日期时间格式化的方法实例)
- 《无敌破坏王2》 不聊彩蛋,聊聊我从动画里看到的现实那些事儿(无敌破坏王2不聊彩蛋)
- 《寄生虫》 三观不正 人类悲欢从来不相通,感同身受也并非本能(寄生虫三观不正)
- 这部动漫中的女孩子,可比101女孩更加励志(这部动漫中的女孩子)
- 《白狐的人生》热拍 贾征宇偶像包袱难自弃 图(白狐的人生热拍)
- 七夕取消了,牛郎织女没做核酸七夕已经取消(牛郎织女没做核酸七夕已经取消)
- 网友抵制 多地取消 夏日祭 为何惹众怒(网友抵制多地取消)
热门推荐
- css怎么设置div边框(div+css实现带箭头的面包屑导航栏)
- pandas删除存在空值的列(详解pandas.DataFrame中删除包涵特定字符串所在的行)
- sql对象资源管理在哪(SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用)
- python怎么判断文件大小(python3实现指定目录下文件sha256及文件大小统计)
- python爬网验证码在哪里(详解python 爬取12306验证码)
- nginx的15种优化方案(Nginx开启Brotli压缩算法实现过程详解)
- dedecms网站二次开发教程(DEDECMS实现自定义表单模型分步提交实现思路)
- sqlserver定时计划(sql server deadlock跟踪的4种实现方法)
- js数组去重复
- extjs Border边框布局