聊时看了下斗鱼直播,突然灵感乍现,想做出这个弹幕效果,于是有了下文
这里还是要说一下我的前端学习群:594959296,从我一个到现在的都是看我每一篇文章来的,可以说都是我们大前端的学霸啊,不定期分享干货。想学到东西的都可以来,欢迎初学和进阶中的小伙伴
1、像优酷、爱奇艺等,记录用户发送弹幕时该视频播放的位置,其他人播放这个视频时到了这个点就显示弹幕。
2、像斗鱼、熊猫这样的直播网站,用户发送弹幕直接显示在屏幕上,以后不需要再显示了。
我们就来做第二种!!!
实现效果
项目分析
1、获取用户输入信息;
2、在页面中创建一个 <span></span>来放获取到的文本,并添加一些样式(字体大小、颜色等);
3、给这个 span添加一个从右向左移动的动画;
4、动画结束后,移除这个 <span>。
思路很清楚了,就来动手实现一下。。
布局
页面中要有一个输入框让用户输入信息,还要一个盒子用来显示弹幕。为了美观,我多加了一些东西。
1、#dm 是显示弹幕的区域,input供用户输入信息(其中 placeholder 属性规定输入框中默认显示内容)。
2、其它元素都是为了美观和布局。
样式
跟以前一样,先给出代码然后再讲解。
1、首先还是格式化浏览器默认的 margin和 padding。overflow属性设置超出屏幕的部分隐藏,这样就不会出现下拉和水平的滚动条了。
2、#dm用来显示弹幕,我们把它的高度设置为 90vh。vh 是 CSS3 中新增的长度单位,表示相对于视口的高度。视口高度被均分为100单位的vh,90vh 就表示当前浏览器可视区域高度的 90%。(vw 就是视口宽度)
3、#dm span是每条弹幕的样式。你可以修改为你喜欢的样子,不过一定要设置 position
定位属性。
4、然后就是下面的输入部分了。使用了 flex布局 (也是CSS3 中新增的内容,太方便了)。只需要 align-items:center;justify-content:center; 这两句就可以使其中的子元素在水平和垂直方向居中。所以 #idDom 和 #content都使用了。
5、然后就是 输入框、按钮的样式了,没什么好说的,应该都能看懂。
JS部分
先看看代码吧。。
1、说明:向页面添加弹幕使用 addBarrage() 函数,添加动画用 move()函数。(把一种功能封装为一个函数是一个好习惯)
2、首先思考一下弹幕的触发事件。应该有两个:点击“发射”按钮、按下 Enter按键。所以分别监听点击 和 键盘事件。
3、然后就要思考怎么向页面添加弹幕了?
先得到用户输入的信息
然后在页面中创建一个
<span></span>
把得到的文本放进去添加到 #dm这个盒子中:
这样就可以了吗?? 当然不是的。。
4、每条弹幕应该有不同的颜色,这样才炫酷。思路就是把预先的颜色放进一个数组,使用的时候用随机的下标,这样就获得了随机颜色。(借鉴斗鱼的 7 中颜色)
这样每条弹幕就有不同的颜色了。
5、每条弹幕在页面上还要有不同的位置(高度),也就是不同的 top 值。我的想法是,虽然要有不同的 top ,但也不能太随意。就像下面这样:(一行是一行的)
我的思路是:先判断页面可以放多少行?
然后计算可以有的 top 值:(加 10 是为了不至于紧挨着屏幕顶部,最后的 -1 是为了不至于太靠下 )
你可以自己理解一下我的这种计算方式。。
然后应用给
<span>
即可:
6、对了,弹幕应该添加到页面的什么位置呢?因为弹幕要从右往左移动,所以应该添加到屏幕的右侧,left 值为浏览器页面的宽度。这时候就知道为什么前面要设置 body 的 overflow: hidden;了吧!!
动画
弹幕(也就是<span>)被添加到页面中了,我们要让他动起来。思路就是写一个函数,减少 <span>
的 left 值。每隔几毫秒执行一次这个函数,我们看起来这个 <span>元素就动起来了。
7、但是有几个问题:
页面中有多少个弹幕(<span>)?因为页面中只有 弹幕 使用的是 <span> 标签,所以这样就可以获取所有 <span>的 nodeList(类似数组但不是数组,可以使用下标索引访问):
怎样记录每条弹幕的 left 值?获取到所有的 <span>后,用一个 for 循环将每一个 <span> 的 left 值放进一个数组:
这样 arr[] 就保存了所有弹幕的 left 值。
8、接下来我们就逐个减少每条弹幕的 left 值:
9、最后判断如果弹幕已经移出了页面的左边,就把这条弹幕删除了吧。
我们可以在开发工具中看一下这个过程:
弹幕的 left 一直减小,移出页面后 #dm中就没有这个 <span>了。
10、最后处理一个小细节吧!当我们点击按钮或按回车后,输入框中的文字会保留,影响我们下次输入,所以只要获取到了用户输入的内容,就把输入框清空吧!
到此,弹幕就实现了。。。
学习javascript也是有门槛的,就是你的html和css至少还比较熟练,您不能连html这东东是干啥的都不知道就开始学javascript了,学乘除前,学好加减法总是有益无害的。
取屏幕:当然,如果你有桌面或者除游戏外其他内容的录制需求,或者有游戏无法识别,可以选择截取屏幕选项。(需把游戏设置为无边框或者窗口化)
全屏截取,顾名思义,既是伴侣获得你的全屏画面,你的屏幕出现什么,你的直播间中便出现什么内容。截取录制,便是截屏的意思,你可以在屏幕中选取任意区域进行直播,选取什么内容,直播间便播出什么内容。
pringCloudAlibaba高并发仿斗鱼直播平台实战
download:https://www.sisuoit.com/4118.html
Spring简介
Spring它是一个结构,轻量级javaEE这个概念,也是由Spring结构衍生出来的
Spring 甚是没有太多新东西,它只是提取了javaEE运用中的常用代码,将其笼统成为了结构
spring 创始人 :Rod Johnson,他的专业不是计算机,而是音乐学,但他也是一个计算机博士
Spring的结构里充满了各种规划形式,spring结构的用法,源码规划更是一套丰富的java大餐
spring的组成
在这里插入图片描述
如上是Spring的七个模块,每个模块都是独立存在,模块与模块可以相互组合运用
(摘录狂神说java)
中心容器:中心容器供给 Spring 结构的基本功能。中心容器的首要组件是 BeanFactory,它是工厂形式的完成。BeanFactory 运用操控回转(IOC) 形式将运用程序的装备和依靠性规范与实践的运用程序代码分隔。
Spring 上下文:Spring 上下文是一个装备文件,向 Spring 结构供给上下文信息。Spring 上下文包含企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring AOP:经过装备办理特性,Spring AOP 模块直接将面向切面的编程功能 , 集成到了 Spring 结构中。所以,可以很容易地使 Spring 结构办理任何支撑 AOP的目标。Spring AOP 模块为基于 Spring 的运用程序中的目标供给了业务办理服务。经过运用 Spring AOP,不用依靠组件,就可以将声明性业务办理集成到运用程序中。
Spring DAO:JDBC DAO 笼统层供给了有意义的反常层次结构,可用该结构来办理反常处理和不同数据库供应商抛出的过错音讯。反常层次结构简化了过错处理,并且极大地降低了需要编写的反常代码数量(例如翻开和关闭衔接)。Spring DAO 的面向 JDBC 的反常遵照通用的 DAO 反常层次结构。
Spring ORM:Spring 结构插入了若干个 ORM 结构,从而供给了 ORM 的目标关系工具,其中包含 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵照 Spring 的通用业务和 DAO 反常层次结构。
Spring Web 模块:Web 上下文模块建立在运用程序上下文模块之上,为基于 Web 的运用程序供给了上下文。所以,Spring 结构支撑与 Jakarta Struts 的集成。Web 模块还简化了处理多部分恳求以及将恳求参数绑定到域目标的工作。
Spring MVC 结构:MVC 结构是一个全功能的构建 Web 运用程序的 MVC 完成。经过策略接口,MVC 结构变成为高度可装备的,MVC 包容了很多视图技术,其中包含 JSP、Velocity、Tiles、iText 和 POI。
从某种意义上说,Spring结构更像一种中间容器,Spring结构向上可以兼容MVC,向下可以与各种持久层结构无缝衔接,,简略的说,他就是胶水,而这也找出来,如果有一天你想将Spring结构,从程序中分离出来,那将会费很大的力气。不过的确好用。
*请认真填写需求信息,我们会在24小时内与您取得联系。