本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
原生JS实现弹幕效果的简单操作指南
luenmicro · 533浏览 · 发布于2020-11-10 +关注

前言

现在很多的直播平台或者视频平台都会用到弹幕加强和观众的互动效果,那么如何用JS实现这样的效果呢,用一个初学者的方法记录下这个方法,欢迎大牛指导。


1、首先需要操作文档必须拿到Dom中的元素,当然有很多方法,这里还是用document.querySelector.

2、这边也是为了键盘和鼠标都可发送封装了一个函数function sendMsg(){


首先需要创建一个容器来接受你编辑的内容,这里用span标签,当然其他标签也可


var oSpan=document.cerateElement(“span”)

将oSpan插入到需要展示的oVideoBox


oVideoBox.appendChild(oSpan)

给oSpan加入class用于编辑插入的样式,当然也可以用js,这里用的CSS样式oSpan.classList.add(“danmu”)


用innerHTML接用户图像及弹幕内容这里用ES6的一个``


Span.innerHTML =` < img src ="./source/lei.jpg" /> ${oContent.value}

计算弹幕出现的初始位置,left位移初始位置即oVideoBox的宽度oVideoBox.offsetWidth.也是oSpan的初始定位oSpan.offsetLeft

top位移的初始即oVideoBox内随机的高度,避免超出


var maxTop=oVideoBox…clientHeight-oSpan.offsetHeight;

var top=Math.round(Math.random()*maxTop)

oSpan.style.top = top+ ‘px'

当然JS的动画也离不开计时器。这边也是用setInterval()


var timer=setInterval(()=>{

var left=oSpan.offsetLeft

left-=10

oSpan.style.left= left+ ‘px'

这边判断一下如果超出屏幕就把弹幕和计时器移出



if(left<-oSpan.offsetWidtb){

clearInterval(timer);

oSpan.remove();}},100)

以上就完成了简易版的弹幕函数就封装完成了,后面就可以引用了,


事件从点击开始,弹幕也是创建点击事件oSend.onclick,


oSend.οnclick=function(){引用函数sendMsg()}

后面可以加上一个键盘的enter可以发送,是一个事件委托window.οnkeydοwn=function(e){



var ev = e || event;

var keyCode = ev.keyCode || ev.which;


判断如果按的是键盘enter的keycode码是13和alt组合


if (keyCode === 13 && ev.altKey) {

sendMsg();}}

以下是bod代码,可以练练

<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>作业_弹幕</title>
 <style>
 * {
  padding: 0;
  margin: 0;
 }
 
 body {
  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
 }
 
 .wrapBox {
  width: 800px;
  height: 550px;
  border: 1px solid #000;
  margin: 50px auto 0;
 }
 
 .videoBox {
  height: 500px;
  position: relative;
  overflow: hidden;
 }
 
 .videoBox img {
  width: 100%;
  height: 100%;
 }
 
 video {
  width: 100%;
  /* height: 500px; */
 }
 
 .danmuSend {
  display: flex;
  height: 50px;
 }
 
 #content {
  flex: 1;
 }
 
 #send {
  width: 100px;
 }
 
 .danmu {
  color: #f00;
  font-size: 20px;
  position: absolute;
  left: 800px;
  top: 0;
  white-space: nowrap;
 }
 
 .danmu img {
  width: 60px;
  height: 60px;
  border-radius: 50%;
  vertical-align: middle;
  display: inline-block;
 }
 </style>
</head>
 
<body>
 <div class="wrapBox">
 <div class="videoBox">
  <img src="../../source/bg.jpg" />
  <!-- <span class="danmu">我是弹幕</span> -->
  <!-- <span class="danmu">我是弹幕</span>
  <span class="danmu">我是弹幕</span>
  <span class="danmu">我是弹幕</span>
  <span class="danmu">我是弹幕</span> -->
 </div>
 <div class="danmuSend">
  <input id="content" type="text">
  <button id="send">发送</button>
 </div>
 </div>
</body>

以下是JS的代码:

<script>


 var oSend = document.querySelector('#send');
 var oContent = document.querySelector('#content');
 var oVideoBox = document.querySelector('.videoBox');




 function sendMsg() {
 var content = oContent.value;

 var oSpan = document.createElement('span');
 oSpan.className = 'danmu';
 oSpan.innerHTML = `<img src="../../source/bg.jpg">${content}`;

 oVideoBox.appendChild(oSpan);

 var maxTop = oVideoBox.clientHeight - oSpan.offsetHeight;

 oSpan.style.top = Math.round(Math.random() * maxTop) + 'px';
 
 var timer = setInterval(() => {
  var left = oSpan.offsetLeft;
  left -= 10;
  oSpan.style.left = left + 'px';
  if (left < -oSpan.offsetWidth) {
  clearInterval(timer);
  oSpan.remove();
  }
 }, 100);
 }

 oSend.onclick = function () {
 sendMsg();
 }

 window.onkeydown = function (e) {
 var ev = e || event;
 var keyCode = ev.keyCode || ev.which;
 if (keyCode === 13 && ev.altKey) {
  sendMsg();
 }
 }

</script>

总结

到此这篇关于原生JS实现弹幕效果的文章就介绍到这了

相关推荐

RN开发环境的npm私库本地debug调试

manongba · 698浏览 · 2019-05-09 17:03:46
你不知道的浏览器渲染原理

追忆似水年华 · 1372浏览 · 2019-05-09 22:47:56
基于iview的router常用控制方式

追忆似水年华 · 999浏览 · 2019-06-03 10:39:21
编程小知识之 JavaScript 文件读取

manongba · 717浏览 · 2019-06-10 09:16:16
10个省时间的 PyCharm 技巧 赶快收藏!

· 702浏览 · 2019-06-10 09:32:01
加载中

0评论

评论
本人有多年的互联网工作经验,专注技术研发,运维工作等!
分类专栏
小鸟云服务器
扫码进入手机网页