最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

原生JS實(shí)現(xiàn)彈幕效果的簡單操作指南

 更新時間:2020年11月10日 12:05:45   作者:表演者7號  
這篇文章主要給大家介紹了關(guān)于原生JS實(shí)現(xiàn)彈幕效果的簡單操作指南,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

現(xiàn)在很多的直播平臺或者視頻平臺都會用到彈幕加強(qiáng)和觀眾的互動效果,那么如何用JS實(shí)現(xiàn)這樣的效果呢,用一個初學(xué)者的方法記錄下這個方法,歡迎大牛指導(dǎo)。

1、首先需要操作文檔必須拿到Dom中的元素,當(dāng)然有很多方法,這里還是用document.querySelector.

2、這邊也是為了鍵盤和鼠標(biāo)都可發(fā)送封裝了一個函數(shù)function sendMsg(){

首先需要創(chuàng)建一個容器來接受你編輯的內(nèi)容,這里用span標(biāo)簽,當(dāng)然其他標(biāo)簽也可

var oSpan=document.cerateElement(“span”)

將oSpan插入到需要展示的oVideoBox

oVideoBox.appendChild(oSpan)

給oSpan加入class用于編輯插入的樣式,當(dāng)然也可以用js,這里用的CSS樣式oSpan.classList.add(“danmu”)

用innerHTML接用戶圖像及彈幕內(nèi)容這里用ES6的一個``

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

計算彈幕出現(xiàn)的初始位置,left位移初始位置即oVideoBox的寬度oVideoBox.offsetWidth.也是oSpan的初始定位oSpan.offsetLeft
top位移的初始即oVideoBox內(nèi)隨機(jī)的高度,避免超出

var maxTop=oVideoBox…clientHeight-oSpan.offsetHeight;
var top=Math.round(Math.random()*maxTop)
oSpan.style.top = top+ ‘px'

當(dāng)然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)

以上就完成了簡易版的彈幕函數(shù)就封裝完成了,后面就可以引用了,

事件從點(diǎn)擊開始,彈幕也是創(chuàng)建點(diǎn)擊事件oSend.onclick,

oSend.οnclick=function(){引用函數(shù)sendMsg()}

后面可以加上一個鍵盤的enter可以發(fā)送,是一個事件委托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>作業(yè)_彈幕</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">發(fā)送</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>

總結(jié)

到此這篇關(guān)于原生JS實(shí)現(xiàn)彈幕效果的文章就介紹到這了,更多相關(guān)原生JS實(shí)現(xiàn)彈幕內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js 實(shí)現(xiàn)省市區(qū)三級聯(lián)動菜單效果

    js 實(shí)現(xiàn)省市區(qū)三級聯(lián)動菜單效果

    本文主要分享了js實(shí)現(xiàn)省市區(qū)三級聯(lián)動菜單效果的示例代碼。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • JavaScript中日期格式化的實(shí)現(xiàn)方法

    JavaScript中日期格式化的實(shí)現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了JavaScript中日期格式化的一些實(shí)現(xiàn)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • 獲取對象

    獲取對象

    獲取對象...
    2006-08-08
  • JavaScript canvas實(shí)現(xiàn)帶有陰影的圖形和文字

    JavaScript canvas實(shí)現(xiàn)帶有陰影的圖形和文字

    這篇文章主要為大家詳細(xì)介紹了JavaScript canvas實(shí)現(xiàn)帶有陰影的圖形和文字,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • uniapp 獲取頁面來源及注意事項(xiàng)

    uniapp 獲取頁面來源及注意事項(xiàng)

    這篇文章主要介紹了uniapp 獲取頁面來源及注意事項(xiàng),獲取當(dāng)前頁面棧的實(shí)例,以數(shù)組形式按棧的順序給出,數(shù)組中的元素為頁面實(shí)例,第一個元素為首頁,最后一個元素為當(dāng)前頁面,感興趣的朋友參考本文實(shí)例代碼
    2024-03-03
  • 利用javascript實(shí)現(xiàn)的三種圖片放大鏡效果實(shí)例(附源碼)

    利用javascript實(shí)現(xiàn)的三種圖片放大鏡效果實(shí)例(附源碼)

    這篇文章主要介紹了利用javascript實(shí)現(xiàn)的幾種放大鏡效果,很實(shí)用一款漂亮的js圖片放大鏡特效,常見于電商網(wǎng)站上產(chǎn)品頁,用來放大展示圖片細(xì)節(jié),很有實(shí)用性,推薦下載學(xué)習(xí)研究。文中提供了完整的源碼供大家下載,需要的朋友可以參考借鑒,一起來看看吧。
    2017-01-01
  • JS實(shí)現(xiàn)數(shù)字格式千分位相互轉(zhuǎn)換方法

    JS實(shí)現(xiàn)數(shù)字格式千分位相互轉(zhuǎn)換方法

    下面小編就為大家?guī)硪黄狫S實(shí)現(xiàn)數(shù)字格式千分位相互轉(zhuǎn)換方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • 兼容ie和firefox js關(guān)閉代碼

    兼容ie和firefox js關(guān)閉代碼

    最近做項(xiàng)目的時候碰到一個問題: 在js里面使用window.close(),IE下工作正常,但是FireFox下有時可以,有時不行。
    2008-12-12
  • js實(shí)現(xiàn)簡易購物車功能

    js實(shí)現(xiàn)簡易購物車功能

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)簡易購物車功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • JavaScript代碼實(shí)現(xiàn)圖片循環(huán)滾動效果

    JavaScript代碼實(shí)現(xiàn)圖片循環(huán)滾動效果

    這篇文章主要介紹了JavaScript代碼實(shí)現(xiàn)圖片循環(huán)滾動效果的相關(guān)資料,非常不錯,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2016-06-06

最新評論

繁峙县| 六盘水市| 邯郸县| 石首市| 上林县| 连江县| 天等县| 鄂托克前旗| 翼城县| 原阳县| 鄯善县| 林芝县| 来宾市| 新绛县| 崇礼县| 红桥区| 宜川县| 泽库县| 西青区| 武胜县| 平阴县| 保靖县| 萝北县| 古浪县| 盐源县| 龙岩市| 囊谦县| 仁怀市| 昌平区| 余干县| 司法| 洪江市| 多伦县| 南乐县| 故城县| 桐梓县| 平谷区| 沭阳县| 遂川县| 安宁市| 加查县|