91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用原生JavaScript編寫一個彈幕功能

發布時間:2020-11-11 14:55:06 來源:億速云 閱讀:154 作者:Leah 欄目:開發技術

利用原生JavaScript編寫一個彈幕功能?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

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的一個``

oSpan.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>

看完上述內容,你們掌握利用原生JavaScript編寫一個彈幕功能的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邵阳市| 玉门市| 泰安市| 陕西省| 东乡县| 花垣县| 灵宝市| 泗阳县| 宣武区| 扶绥县| 砀山县| 合水县| 海宁市| 玉林市| 馆陶县| 上饶县| 安宁市| 承德县| 云安县| 延安市| 天峻县| 安泽县| 南陵县| 郎溪县| 登封市| 广饶县| 会昌县| 长乐市| 玉环县| 芜湖市| 文安县| 海林市| 绥棱县| 甘谷县| 双峰县| 盱眙县| 石林| 周口市| 宁乡县| 临漳县| 攀枝花市|